如何使用 JodaTime 获取 2 个日期之间的时间差(以毫秒为单位)

发布于 2024-11-23 20:39:18 字数 367 浏览 1 评论 0原文

我将设计一个应用程序,在其中我需要获取两个日期之间的准确时间差。例如:

Date1:31/05/2011 12:54:00
Date2:31/05/2011 13:54:00

我尝试使用 getTime() 但没有得到确切的结果。

上述输入的预期输出为 3600000 (60 * 60 * 1000) 毫秒,但我得到 46800000 (13 * 60 * 60 * 1000)。

当我访问不同的 java 论坛时,人们建议使用 JodaTime。

我仍然无法得到确切的结果。

我工作的时区是伦敦(GMT)。

I'm going to design an application, in which I need to get the exact time difference between two dates. Ex:

Date1:31/05/2011 12:54:00
Date2:31/05/2011 13:54:00

I tried using getTime() but I didn't get exact result.

The expected output for the above inputs is 3600000 (60 * 60 * 1000) millisec but I'm getting 46800000 (13 * 60 * 60 * 1000).

When I went through different java forums people are suggesting to use JodaTime.

Still I'm unable to get the exact result.

The timezone on I'm working is London(GMT).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

一页 2024-11-30 20:39:18

初始化两个 dateTime 并使用 period :

DateTime dt1 = new DateTime(2013,9,11,9,58,56);
DateTime dt2 = new DateTime(2013,9,11,9,58,59);
Period p = new Period(dt1, dt2, PeriodType.millis());

要获得以毫秒为单位的差异:

System.out.println(p.getValue(0));

Init two dateTime and use Period :

DateTime dt1 = new DateTime(2013,9,11,9,58,56);
DateTime dt2 = new DateTime(2013,9,11,9,58,59);
Period p = new Period(dt1, dt2, PeriodType.millis());

To get difference in milliseconds :

System.out.println(p.getValue(0));
情释 2024-11-30 20:39:18
public static long getDiff(Calender cal1, Calender cal2)
{
    return Math.abs(cal1.getTimeInMillis() - cal2.getTimeInMillis());
}
public static long getDiff(Calender cal1, Calender cal2)
{
    return Math.abs(cal1.getTimeInMillis() - cal2.getTimeInMillis());
}
一江春梦 2024-11-30 20:39:18

查看secondsBetween( )

创建一个 Seconds 来表示之间的整秒数
两个指定的部分日期时间。
两个部分必须包含相同的字段,例如您可以
指定两个 LocalTime 对象。

参数:

 start - the start partial date, must not be null
    end - the end partial date, must not be null 

返回:

 the period in seconds 

Check out secondsBetween( )

Creates a Seconds representing the number of whole seconds between the
two specified partial datetimes.
The two partials must contain the same fields, for example you can
specify two LocalTime objects.

Parameters:

 start - the start partial date, must not be null
    end - the end partial date, must not be null 

Returns:

 the period in seconds 
べ繥欢鉨o。 2024-11-30 20:39:18

JodaTime里面使用的是机器时间。因此,要查找毫秒,您可以使用常量存储 LocalDateTime,引用 1970 年 1 月 1 日(因为 UNIX Time< /a>)。

Unix 时间,或 POSIX 时间,是一种描述时间点的系统,
定义为自午夜预产期以来经过的秒数
1970 年 1 月 1 日的协调世界时 (UTC),不包括闰月
秒。然后计算您的日期时间之间的差异。

我这样尝试过;

public static void main(String[] args) {
        final LocalDateTime JAN_1_1970 = new LocalDateTime(1970, 1, 1, 0, 0);
        DateTime local = new DateTime().withZone(DateTimeZone.forID("Europe/Amsterdam"));
        DateTime utc = new DateTime(DateTimeZone.UTC);

        System.out.println("Europe/Amsterdam milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.forID("Europe/Amsterdam")), local).getMillis());
        System.out.println("UTC  milis             :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.UTC), utc).getMillis());

    }

结果是;

Europe/Amsterdam milis :1429695646528
UTC  milis             :1429692046534

@leonbloy这里有一个很好的评论。

您的本地时间和 utc 代表相同的时间点(仅适用于
附有不同时区)。因此,getMillis()(它给出了
从对应的“瞬间”开始经过的“物理”时间间隔
unix 纪元),必须返回相同的值。

JodaTime is using machine time inside. So to find miliseconds, you can use a constant storing LocalDateTime referring to Jan 1, 1970(Because of UNIX Time).

Unix time, or POSIX time, is a system for describing points in time,
defined as the number of seconds elapsed since midnight proleptic
Coordinated Universal Time (UTC) of January 1, 1970, not counting leap
seconds. Then calculate the difference between your DateTime.

I tried like this;

public static void main(String[] args) {
        final LocalDateTime JAN_1_1970 = new LocalDateTime(1970, 1, 1, 0, 0);
        DateTime local = new DateTime().withZone(DateTimeZone.forID("Europe/Amsterdam"));
        DateTime utc = new DateTime(DateTimeZone.UTC);

        System.out.println("Europe/Amsterdam milis :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.forID("Europe/Amsterdam")), local).getMillis());
        System.out.println("UTC  milis             :" + new Duration(JAN_1_1970.toDateTime(DateTimeZone.UTC), utc).getMillis());

    }

And the result is;

Europe/Amsterdam milis :1429695646528
UTC  milis             :1429692046534

And @leonbloy write here a good comment.

Your local and utc represent the same instants of time, (only with
different timezones attached). Hence, getMillis() (which gives the
"physical" time interval elapsed from the "instant" corresponding to
the unix epoch), must return the same value.

如果没有你 2024-11-30 20:39:18

Joda 是一个完美的库,但如果您需要 2 个日期之间的毫秒数差异,您只需计算 getTime() 之间的差异。如果你得到错误的结果,那么你就会遇到时区等问题。通常它会起作用。

Joda is a perfect library but if you need the difference between 2 dates in milliseconds you just should calculate difference between getTime(). If you get wrong results you have some problems with timezones or so. Typically it works.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文