Java 日期操纵的问题
我从Oracle数据库的开始日期和结束日期中获得了2个时间戳。它们的格式为Java 日期操纵的问题,java,oracle,timestamp,Java,Oracle,Timestamp,我从Oracle数据库的开始日期和结束日期中获得了2个时间戳。它们的格式为yyyy-MM-dd HH:MM:ss.SSS 现在,我从一个文本文件中获取另一个时间戳进行比较。它是字符串格式的。下面是我为提取所需信息而编写的代码 DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy"); Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011"); Syst
yyyy-MM-dd HH:MM:ss.SSS
现在,我从一个文本文件中获取另一个时间戳进行比较。它是字符串格式的。下面是我为提取所需信息而编写的代码
DateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zz yyyy");
Date date = f.parse("Tue Aug 23 20:00:03 PDT 2011");
System.out.println("---date----" + f.format(date));
String originalDate = f.format(date);
System.out.println("---originalDate----" + originalDate);
DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String dateParse = f2.format(date);
System.out.println("---dateParse----"+dateParse);
我得到的输出有点奇怪,而且非常不一致。下面是示例
---日期——2011年8月23日星期二20:00:03太平洋标准时间
---原始日期——2011年8月23日星期二20:00:03太平洋标准时间
---日期解析----2011-08-24 08:30:03.000
在上面的输出中,我对--dateparse--值感兴趣,因为我需要它来进行比较。
现在,如果您看到理想情况下的值是变化的,那么这两个值应该是相同的
这里的问题是,如果输出随时区而变化,那么我应该如何在代码中对从数据库获取的数据进行比较
我只需要看看——dateparse——是否位于我从db获得的日期范围之间。
该代码是否独立于时区正常工作,或者这里存在一些问题。
如果日期不同,则我的比较可能出错,或者这是上述两个输出的正确方式
请告诉我如何解决这个问题。请参考类文档并使用构造函数: 要检查您的区域设置,请使用以下代码:
Locale.getDefault()
也许这就是你得到这些结果的原因
我只需要看看——dateparse——是否位于我从db获得的日期范围之间
假设:
Date
从数据库中检索对象Date
的所有实例都具有适当的绝对值(从1970年1月1日开始计算毫秒数),因此比较正确
那么你应该注意什么呢?没有时区或区域设置信息的日期/时间字符串。如果要解析其中一个,将使用与写入数据的时间/地点不同的区域设置和时区。在这种情况下,检索到的日期可能引用了错误的绝对时间。如果将时区添加到第二个日期格式中,您会注意到它使用默认区域设置输出,如前所述。例如,在我的电脑上,它以英国夏季时间(英国的当前时区)显示
DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zz");
System.out.println("---dateParse----" + f2.format(date));
输出:
---dateParse----2011-08-24 04:00:03.000 BST
如果要强制日期格式的输出时区,可以使用以下方法执行此操作:
然后,输出变为:
---dateParse----2011-08-23 20:00:03.000 PDT
与
Locale
一样,如果需要,也有一个getDefault
方法。数据库中数据的时区是什么?(它真的在一个文本字段中吗?你不需要解析来自数据库的数据…)我同意@Jon的观点。您不必将数据库中的日期解析为字符串。它应该是java.util.Date。。。
f2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
---dateParse----2011-08-23 20:00:03.000 PDT