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

Java 如何在不同的时区中以秒为单位查找两个日期之间的差异,java,date,time,calendar,timezone,Java,Date,Time,Calendar,Timezone,我有一段代码可以找到两个日期之间的差异(格式为yyyy-MM-dd hh:MM:ss)。此代码在全球多个服务器中运行。两个日期中的一个是运行代码的特定时区中的当前时间(服务器时间),另一个是从数据库中获取的时间。如果这两个时间差大于86400秒(1天),则应打印“无效”,否则应打印“有效”。 我面临的问题是,当我在本地运行代码时,它工作正常,但当我将代码部署到美国的服务器上时,它考虑的是GMT时间,而不是本地时间。 无论代码在哪里运行,我都需要当前时间和从数据库获取的时间之间的差异,如果它大于8

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

现在比较date1和date2首先,我同意Peter Lawrey的回答。通常,将所有时间存储在单个区域的数据库中,并根据用户的区域设置使用偏移量对其进行渲染是一种很好的做法

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


希望这有帮助。

设置默认时区对您有用吗?:不,只有在单个时区中部署代码时,设置默认时区才有效。我的代码将部署在全球多个服务器上