如何在不同时区找到两个日期之间的差异,以秒为单位

时间:2012-05-08 10:58:51

标签: java date time calendar timezone

我有一段代码可以找到两个日期之间的差异(格式为yyyy-MM-dd hh:mm:ss)。此代码在全球多个服务器中运行。两个日期中的一个是正在运行代码的特定时区的当前时间(服务器时间),另一个是从数据库获得的时间。如果这两次之间的差异大于86400秒(1天),则应打印“无效”,否则应打印“有效”。 面对代码的问题是当我在我的本地运行时,它工作正常,但是当我将它部署到美国的服务器上时,它考虑了GMT时间而不是本地时间。 无论代码运行在哪里,我都希望从数据库中获取当前时间和时间之间的差异,如果它大于86400秒,我想打印无效。如何在java中实现这一点? PS:我试过Date对象,但它只考虑GMT到处都是。

3 个答案:

答案 0 :(得分:5)

我会在任何地方使用GMT,只能转换为当地时间用于显示目的。

要找到差异,请将两个时间转换为相同的时区(比如GMT),并采取差异。

答案 1 :(得分:2)

您可以通过以下示例代码来完成。

Date date = new Date();

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("CET"));

Date date1 = dateformat.parse(formatter.format(date));

// Set the formatter to use a different timezone
formatter.setTimeZone(TimeZone.getTimeZone("IST"));

Date date2 = dateformat.parse(formatter.format(date)); 
// Prints the date in the IST timezone
//    System.out.println(formatter.format(date));

现在将date1与date2进行比较

答案 2 :(得分:0)

首先,我同意Peter Lawrey在那里的回答。通常,将所有时间存储在单个区域的数据库中,并根据用户的区域设置为用户呈现偏移量是一种好习惯。

要找到差异,请使用方法getTime()从每个日期的纪元获取时间(以毫秒为单位)。 1天差异的计算则为86400 * 1000毫秒。或者,也许,将时间以毫秒为单位存储在数据库中的纪元中,并在检索时使用数据库过程/函数。

希望这有帮助。