繁体   English   中英

日期操作问题

[英]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--是否位于我从数据库获取的日期范围之间即可。

假设:

  1. 从数据库中检索Date对象
  2. 时区信息以正在解析的文件格式嵌入

然后,所有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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM