永发信息网

java中请问如何把 Tue Jan 02 00:05:52 CST 1900 转成oracle中number(例如1317362502)类型的 。

答案:3  悬赏:10  手机版
解决时间 2021-04-13 23:12
java中请问如何把 Tue Jan 02 00:05:52 CST 1900 转成oracle中number(例如1317362502)类型的 。
最佳答案
仅对于所给数据可以
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Test {
static public void main(String 参数[]){
SimpleDateFormat f=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.ENGLISH);
String t="Tue Jan 02 00:05:52 CST 1900";
try{
Date d=f.parse(t);
System.out.println(t+" => "+(d.getTime()/1000));
}catch (ParseException e){
e.printStackTrace();
}
}
}
=============
Tue Jan 02 00:05:52 CST 1900 => -2208930848

值得注意的是
所给的样本数据的年份是1900年,通常unix时间戳秒值(也就是你感知的“oracle中number”)只从1970年开始记录到2035年,扩展版也仅上延到191x年。不该用时间戳来记录1900这样历史年份。
所以输入数据的范围和选用相应的格式是你首先该确认的,然后才可能有正确的转换代码追问这个范围我也不清楚数据库是一个产品数据库。里面的字段没有说明。我测试了一下1322184161对应的是 1970-01-16 01:16:54 我现在的时间该怎么对应呢?
那么现在对应的时间该怎么成为类似的?
我对这方面不懂麻烦多版帮忙。谢谢了追答如果1322184161对应1970年。那这个数据就不是用的时间戳而仅仅是java的timemillis时间毫秒戳。 前贴代码把d.getTime()/1000改成d.getTime(),可以处理历史上的任何年份 。

如果1322184161是unix时间戳值,这个数据将对应2011年11月25日某时(Fri Nov 25 09:22:41 CST 2011)。这更像是有效的数据。代码将只能正确处理1970-2035年之间的日期,这是这个格式的性质决定的,在python,php,c/c++等环境也一样。不要输入1900这样的年份。
前贴给的代码是针对后一种情况。
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Test {
static public void main(String 参数[]){
SimpleDateFormat f=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.ENGLISH);
String t="Tue Jan 02 00:05:52 CST 1900";
try{
Date d=f.parse(t);
System.out.println(t+" => "+(d.getTime()/1000));

int ts=1322184161;
d.setTime(ts*1000L);
System.out.println(ts+" => "+f.format(d));
}catch (ParseException e){
e.printStackTrace();
}
}
}
=========
Tue Jan 02 00:05:52 CST 1900 => -2208930848000
1322184161 => Fri Nov 25 09:22:41 CST 2011追问那为什么Tue Jan 02 00:05:52 CST 1900 不变成和1322184161 类似的时间格式啊?追答“Tue Jan 02 00:05:52 CST 1900”中的【【【【1900年】】】】
强行勉强转换成时间戳值,可以得到-2208930848
但超过了时间戳的取值范围[0,0x7FFFFFFF],即有符号32bit整型的正数范围
范围代表的时间是1970年-2035年
超过了范围,这个数值将无法被其他系统解读,不能用于交换,甚至不能正确被储存。

而1322184161这个值代表2011年的日期,在这个范围中。所以转换没有问题。
(当然,我的要求偏高,你们系统本身或开发者如果都不在乎细节,就无所谓了,反正【没出错之前都是正确的】。)

打个其他的比方,你是在要求别人把汉字“负五十”转换到0到10之间
别人可以转换成-50,但不在0到10之间。至少没有已知规则去转。追问恩,你说的那个我知道了 ,我想知道代码怎么转换成的。我试了一下代码还是没有写成功。对这方面知道的太少了追答写成函数,就是转换成java时间毫秒值后除以1000。
仅对1970-2035年之间的日期输出正确结果,范围之外的日期也有输出但不正确。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

public class Test {
static public void main(String 参数[]){
String t="Tue Jan 02 00:05:52 CST 2011";
System.out.println(t+" => "+convertDateTextToTimestamp(t));
}
static public int convertDateTextToTimestamp(String t){
SimpleDateFormat f=new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy",Locale.ENGLISH);
try{
Date d=f.parse(t);
return (int) (d.getTime()/1000L);
}catch (ParseException e){
e.printStackTrace();
return Integer.MIN_VALUE;
}
}
}
=====
Tue Jan 02 00:05:52 CST 2011 => 1293897952
全部回答
getTimeMillis();
Date date = new Date();//Tue Jan 02 00:05:52 CST 1900
date.getTime();//就得到你要的东西了1317362502追问Date applyStartDate = (Date)listValue.get(index);
applyStartDate 的值为 Tue Jan 03 00:00:00 CST 2012
long numApplyStartDate = applyStartDate.getTime();
numApplyStartDate 的值为 1325520000000 位数有差距
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
QQ农场开外挂要封号吗
问道避暑粉衣值多少钱?
QQ农场总是在收菜偷菜除草的时候死那边了?而
崔永元是中央电视台著名主持人,一次录制节目
3.35猎人破甲要多少
need作情态动词是什么意思,作实义动词时是什
海之梦水族在什么地方啊,我要过去处理事情
十代思域需要加装发动机护板与底盘装甲么
三星I889酷狗听歌的时候会自动关闭,怎么回事
为什么我种的西红柿长的这么慢啊?家庭盆栽应
北京通州区有没有比较好点的电子市场或者是IT
防沉迷在哪填写呀我找不到呀~
魔兽地图星河战队散弹带闪烁和多重攻击和一个
心情不好,而切很压抑的时候怎么办
男的喜欢肚兜旗袍是不是心理不正常啊
推荐资讯
本本标题烂下方有一条线在闪烁,是什么原因造
惠普CQ40-509AX装完XP后无法调节屏幕亮度
天彩印刷这个地址在什么地方,我要处理点事
索尼l39u 能使用现在的联通4g fdd网络
三官堂在哪里啊,我有事要去这个地方
我如何才能对得起你?
南岗区哈尔滨益源网络旅馆哪位知道具体地址啊
与天空有关的古诗句,请写出与天空有关的古诗
求大黄蜂,阿波罗,雷诺的数据
关于医院扣钱奖金的问题
我该怎样去维持相隔俩地的爱情?
古代赠母亲生日的诗词,长辈送晚辈出行诗词
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?