2012-09-25 45 views
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); 

我得到的输出有点奇怪,而且非常不一致。以下是样品 ---日期---- 8月23日星期二20:00:03 PDT 2011 --- originalDate ---- 8月23日星期二20:00:03 PDT 2011 --- dateParse ---- 2011-08-24 08:30:03.000

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

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

我只需要看看--dateparse--位于从db获取的日期范围之间。 此代码是否可以正常工作,与时区无关或者此处存在问题。 如果日期不同,那么我的比较可能会出错,或者是上述2个输出的正确方法。

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

+1

数据库中数据的时区是什么? (它真的*在文本字段中?您不需要解析数据库中的数据...) –

+0

我同意@Jon。您不必从数据库中解析日期为字符串。它应该像java.util.Date一样来... – gdfbarbosa

回答

0

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

假设:

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

检索。然后Date所有实例都具有适当的绝对值(从1970年1月1日开始计算毫秒数),从而正确比较。

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

0

如果添加一个时区到你的第二个日期格式,你会发现它使用它默认的语言环境,为barbosa指出输出。例如,在我的电脑上,它显示英国夏令时,英国目前的时区。

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

输出:

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

输出则变为:

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

如果要生效的日期格式的输出时间区域,您可以在此使用setTimeZone方法做:

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

就像LocaleTimeZone有一个getDefault方法,如果有必要。