Java:比较同一时区的日期



给定:

SimpleDateFormat sd = new SimpleDateFormat ("yy-MM-dd hh:mm:ss.SSS");
sd.setTimeZone(TimeZone.getTimeZone("GMT"));
Date d = sd.parse("a date similar to now on local computer");

如果我将d.getTime()new Date().getTime()进行比较,则值与一个多小时不同。为什么?

检查您的时区。您正在比较不在格林威治标准时间的时间。

您明确地将SimpleDateFormat设置为在 GMT 中解析,这意味着当您解析当前时钟时间时,您将获得该时间在 GMT 时区中发生的时刻。 如果您不在格林威治标准时间时区,那将不是"现在"。

Date对象对时区一无所知 - Date对象中没有明确的时区信息。Date对象表示"绝对"时刻(时间戳)。这意味着您不应该将Date对象视为"某个时区的日期" - 它没有时区。

假设您从某个来源获得一个包含日期和时间的String,其中没有提到明确的时区,例如: 2014-12-16 17:30:48.382 .假设您知道此日期和时间是 GMT 时区。

然后,您可以将其解析为具有适当SimpleDateFormat对象的Date对象:

DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// Set the timezone of the SimpleDateFormat to GMT, because you know the string
// should be interpreted as GMT
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
// Parse the String into a Date object
Date dateTime = fmt.parse("2014-12-16 17:30:48.382");
// Date object which is set to "now"
Date now = new Date();
// Compare it to "now"
if (dateTime.before(now)) {
    System.out.println("The specified date is in the past");
} else if (dateTime.after(now)) {
    System.out.println("The specified date is in the future");
} else {
    System.out.println("The specified date is now");
}

如果要以特定时区打印日期,请使用设置为相应时区的SimpleDateFormat来设置日期的格式。

DateFormat outfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
outfmt.setTimeZone(TimeZone.getTimeZone("EDT"));
// Will print dateTime in the EDT timezone
System.out.println(outfmt.format(dateTime));

相关内容

  • 没有找到相关文章