3

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

4

3 回答 3

5

我会在任何地方使用 GMT,并且只转换为当地时间以进行显示。

要找出差异,请将两个时间都转换为相同的时区(例如 GMT)并计算差异。

于 2012-05-08T11:06:38.507 回答
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

于 2012-05-08T11:13:31.563 回答
0

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

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

希望这可以帮助。

于 2012-05-08T11:17:12.497 回答