java中请问如何把 Tue Jan 02 00:05:52 CST 1900 转成oracle中number(例如1317362502)类型的 。
答案:3 悬赏:10 手机版
解决时间 2021-04-13 23:12
- 提问者网友:战魂
- 2021-04-13 06:11
java中请问如何把 Tue Jan 02 00:05:52 CST 1900 转成oracle中number(例如1317362502)类型的 。
最佳答案
- 五星知识达人网友:一叶十三刺
- 2021-04-13 06:54
仅对于所给数据可以
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
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
全部回答
- 1楼网友:举杯邀酒敬孤独
- 2021-04-13 08:04
getTimeMillis();
- 2楼网友:蕴藏春秋
- 2021-04-13 07:46
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 位数有差距
date.getTime();//就得到你要的东西了1317362502追问Date applyStartDate = (Date)listValue.get(index);
applyStartDate 的值为 Tue Jan 03 00:00:00 CST 2012
long numApplyStartDate = applyStartDate.getTime();
numApplyStartDate 的值为 1325520000000 位数有差距
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯