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