[英]Problems with Date manipulation
我从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");
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 --- originalDate ---- 2011年8月23日2月23日太平洋夏令时间--dateParse ---- 2011-08 -24 08:30:03.000
在上面的输出中,我对---- dateparse ---值感兴趣,因为需要进行比较。 现在,如果您看到值在理想情况下有所变化,则两个值应相同。
这里的问题是,如果输出随时区变化,那么我应该如何对从数据库中获取的数据中的代码进行比较?
我只需要查看--dateparse--是否位于从数据库获取的日期范围之间即可。 此代码是否可以独立于时区正常工作,或者此处存在一些问题。 如果日期是变化的,那么我的比较可能会出错,或者上述两个输出是正确的方法。
您能告诉我如何解决此问题。
请参考类文档并使用构造函数:
http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat(String pattern, Locale locale)
要检查您的语言环境,请使用以下代码:
Locale.getDefault()
也许这就是为什么您得到这些结果。
我只需要查看--dateparse--是否位于我从数据库获取的日期范围之间即可。
假设:
Date
对象 然后,所有Date
实例都具有正确的绝对值(自1970年1月1日起,以毫秒为单位),因此可以正确比较。
那么,您应该注意什么呢? 没有时区或语言环境信息的日期/时间字符串。 如果要解析其中之一,则将使用“区域设置”和“时区”,它们可能与写入数据的时间/位置不同。 在这种情况下,检索到的Date
可能会引用错误的绝对时间。
如barbosa所指出的,如果您在第二个日期格式中添加了时区,则会使用默认语言环境将其输出。 例如,在我的PC上,它以英国当前时区英国夏令时显示它。
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
如果要强制使用日期格式的输出时区,可以使用setTimeZone
方法执行此操作:
f2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
输出将变为:
---dateParse----2011-08-23 20:00:03.000 PDT
就像Locale
一样,如果需要, TimeZone
也具有getDefault
方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.