这段代码:

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-DD_HH-mm-ss");
Date date=null;
try {
  date = format.parse("2012-07-04_13-42-03");
} catch (Exception e) {
}
File file = new File("File.txt");
Date now=new Date();
Date last= new Date(file.lastModified());
System.out.println("exec:"+date+" "+date.getTime()+" "+date.getTimezoneOffset());
System.out.println(" now:"+now+" "+now.getTime()+" "+now.getTimezoneOffset());
System.out.println("last:"+last+" "+last.getTime()+" "+last.getTimezoneOffset());


给出结果:

exec:Wed Jan 04 13:42:03 CET 2012 1325680923000 -60
 now:Wed Jul 04 13:42:20 CEST 2012 1341402140349 -120
last:Mon Jul 02 17:26:37 CEST 2012 1341242797000 -120


如何从字符串创建日期,以便可以在同一时区中将其与其余日期进行比较?

最佳答案

Date没有时区。令人困惑的是,Date.toString()总是返回以系统默认时区格式设置的值,而Date.getTimeZoneOffset也是如此。

现在,在系统默认时区(从外观上看,是欧洲中部时间),UTC的偏移量会在一年中变化,时区缩写也是如此。这就是您所看到的:“中欧”时间(UTC + 1)和“中欧夏令时”)(UTC + 2)之间的时差。这是您要转换为字符串表示形式的Date值表示的当前时间所在的当前系统时区中的时区信息。

同样,Date本身没有有关时区的信息。这只是时间点。您可以设置SimpleDateFormat在解析或格式化时使用的时区-这是另一回事。

您还应该考虑尽可能使用Joda Time-它比Java内置的API更好。

关于java - 为什么用不同的时区创建该日期?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11328570/

10-12 17:21
查看更多