0

我从 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);

我得到的输出有点奇怪,而且非常不一致。以下是示例 ---date----Tue Aug 23 20:00:03 PDT 2011 ---originalDate----Tue Aug 23 20:00:03 PDT 2011 ---dateParse----2011-08 -24 08:30:03.000

在上面的输出中,我对 ----dateparse--- 值感兴趣,因为我需要这个值进行比较。现在,如果您看到理想情况下的值是不同的,两者都应该是相同的值。

这里的问题是,如果输出随时区而变化,那么我应该如何根据从数据库中获取的数据在代码中进行比较?

我只需要查看 --dateparse-- 是否位于我从 db 获得的日期范围之间。此代码是否会独立于时区正常工作,或者这里有一些问题。如果日期不同,那么我的比较可能会出错,或者上面 2 个输出的正确方法。

你能告诉我如何解决这个问题。

4

3 回答 3

1

请参考类文档并使用构造函数:

http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html

SimpleDateFormat(String pattern, Locale locale)

要检查您的语言环境,请使用以下代码:

Locale.getDefault()

可能这就是你得到这些结果的原因。

于 2012-09-25T20:05:56.803 回答
0

If you add a time zone to your second date format, you'll notice it outputs it using your default locale, as barbosa pointed out. For example, on my PC it displays it in British Summer Time, the current time zone in the UK.

DateFormat f2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zz");
System.out.println("---dateParse----" + f2.format(date));

Output:

---dateParse----2011-08-24 04:00:03.000 BST

If you want to force the output time zone of the date format, you can do this using the setTimeZone method:

f2.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));

The output then becomes:

---dateParse----2011-08-23 20:00:03.000 PDT

Just like Locale, TimeZone has a getDefault method, if necessary.

于 2012-09-25T20:26:14.887 回答
0

我只需要查看 --dateparse-- 是否位于我从 db 获得的日期范围之间。

认为:

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

然后所有实例Date都具有正确的绝对值(自 1970 年 1 月 1 日以来的毫秒数),因此可以正确比较。

那么你应该注意什么?没有时区或区域信息的日期/时间字符串。如果您要解析其中之一,则将使用您的区域设置和时区,这可能与写入数据的时间/地点不同。在这种情况下,检索到Date的可能引用了错误的绝对时间。

于 2012-09-25T20:23:07.160 回答