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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

参考技术A 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 位数有差距

参考技术B getTimeMillis();

在java里面,如何得到UTC时间, 时间格式为:Tue Oct 12 00:00:00 UTC 0800 2010

public class StringToDate
public static void main(String []args)
String myString="2011-09-18 11:20:30";
Date myDate=null;
DateFormat df = DateFormat.getDateInstance();
//设置时间格式
SimpleDateFormat myFormDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try
myDate = df.parse(myString);
catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();

System.out.println(myDate);



结果:Sun Sep 18 00:00:00 CST 2011
参考技术A new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); 参考技术B System.out.println(new Date());

//若要控制格式如下:
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
输出上面的结果格式为:2011-11-11 22:22:22
那个HH表示小时,大写为24小时制,小写为12小时制
参考技术C Calendar里面的方法找一下吧 参考技术D java.util.data

以上是关于java中请问如何把 Tue Jan 02 00:05:52 CST 1900 转成oracle中number(例如1317362502)类型的 。的主要内容,如果未能解决你的问题,请参考以下文章

在java里面,如何得到UTC时间, 时间格式为:Tue Oct 12 00:00:00 UTC 0800 2010

如何强制浏览器重新缓存网站? [复制]

Javascript 和 Java 日期 JSON 序列化

如何更改:Sun Jan 01 00:00:00 BRST 2006 to 2006-01-01 00:00:00.0

nodejs获取文件信息,判断是文件或目录

java.text.ParseException:无法解析的日期:“Thu Jan 19 2012 08:00 PM”