我有一段代码可以找到两个日期之间的差异(格式为 yyyy-MM-dd hh:mm:ss)。此代码在全球多个服务器中运行。两个日期中的一个是运行代码的特定时区的当前时间(服务器时间),另一个是从数据库中获取的时间。如果这两个时间之间的差异大于 86400 秒(1 天),那么它应该打印"无效"否则,它应该打印"有效"。我在代码方面面临的问题是当我在本地运行它时,它工作正常,但是当我将其部署到美国的服务器上时,它会考虑 GMT 时间而不是本地时间。无论代码在哪里运行,我都希望当前时间和从数据库中获取的时间之间的差异,如果它大于 86400 秒,我想打印无效。如何在java中实现这一点?PS:我尝试使用日期对象,但它只在任何地方考虑 GMT。
我会在任何地方使用 GMT,并且只转换为本地时间以用于显示目的。
要找到差异,请将两个时间转换为相同的时区(例如 GMT)并取差异。
您可以通过以下示例代码进行操作。
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));
现在将日期 1 与日期 2 进行比较
首先,我同意彼得·劳里(Peter Lawrey)的回答。通常,最好在数据库中存储单个区域的所有时间,并根据用户的区域设置为用户呈现偏移量。
若要查找差异,请使用方法 getTime()
从每个日期的纪元中获取时间(以毫秒为单位)。1 天差值的计算公式为 86400 * 1000 毫秒。或者,也许,将从纪元开始的时间存储在数据库中,并在检索时使用数据库过程/函数。
希望这有帮助。