【问题标题】:How to find difference between two dates in seconds in different timezones如何在不同时区以秒为单位查找两个日期之间的差异
【发布时间】:2012-05-16 20:36:37
【问题描述】:

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

【问题讨论】:

标签: java date time calendar timezone


【解决方案1】:

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

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

【讨论】:

    【解决方案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

    【讨论】:

      【解决方案3】:

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

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-09-13
        • 2011-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-29
        • 2011-04-27
        • 2015-08-03
        相关资源
        最近更新 更多