Java-如何在使用Joda Time Jar时计算准确的时差
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17499987/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java-How to calculate accurate time difference while using Joda Time Jar
提问by Rakesh L
I'm having problem with Joda time jar that I downloaded from http://sourceforge.net/projects/joda-time/files/joda-time/2.2/. I can get the result when I use the following snippet
我从http://sourceforge.net/projects/joda-time/files/joda-time/2.2/下载的 Joda 时间 jar 有问题。当我使用以下代码段时,我可以获得结果
static void timeDifferencewithJoda() {
String dateStart = "01/14/2012 09:29:58";
String dateStop = "01/15/2012 10:31:48";
SimpleDateFormat format = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date d1 = null;
Date d2 = null;
try {
d1 = format.parse(dateStart);
d2 = format.parse(dateStop);
DateTime dt1 = new DateTime(d1);
DateTime dt2 = new DateTime(d2);
System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");
} catch (Exception e) {
e.printStackTrace();
}
}
The Result was
结果是
1 days, 1 hours, 1 minutes, 50 seconds.
But I face the confliction with this time difference .
但我面临着与这个时差的冲突。
01/14/2012 09:29:58
01/15/2012 10:31:48
here the two time has been declared ,but there's no indication to the period like AM or PM. ie., The time may be morning or evening .How to I get exact time difference ?
这里已经宣布了两个时间,但没有像 AM 或 PM 这样的时期的迹象。即,时间可能是早上或晚上。如何获得确切的时差?
Any help regarding this will be useful.
任何有关这方面的帮助都是有用的。
回答by Ilya
Using Joda formatter(non AM/PM)
使用Joda 格式化程序(非 AM/PM)
final String dateStart = "01/14/2012 09:29:58";
final String dateStop = "01/15/2012 10:31:48";
final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy HH:mm:ss");
final DateTime dt1 = format.parseDateTime(dateStart);
final DateTime dt2 = format.parseDateTime(dateStop);
System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");
Using Joda formatter(with AM/PM)
使用Joda 格式化程序(使用 AM/PM)
final String dateStart = "01/14/2012 09:29:58 AM";
final String dateStop = "01/15/2012 10:31:48 PM";
final DateTimeFormatter format = DateTimeFormat.forPattern("MM/dd/yyyy hh:mm:ss a");
final DateTime dt1 = format.parseDateTime(dateStart);
final DateTime dt2 = format.parseDateTime(dateStop);
System.out.print(Days.daysBetween(dt1, dt2).getDays() + " days, ");
System.out.print(Hours.hoursBetween(dt1, dt2).getHours() % 24 + " hours, ");
System.out.print(Minutes.minutesBetween(dt1, dt2).getMinutes() % 60 + " minutes, ");
System.out.print(Seconds.secondsBetween(dt1, dt2).getSeconds() % 60 + " seconds.");
Calculate units between with Period
计算与Period之间的单位
final Period period = new Period(dt1, dt2);
System.out.print(period.getDays() + " days, ");
System.out.print(period.getHours() + " hours, ");
System.out.print(period.getMinutes() + " minutes, ");
System.out.print(period.getSeconds() + " seconds.");
回答by Dmitry Kuskov
In your SimpleDateFormat, you have HH to specify hours, and as stated in documentation, HH stands for - Hour in day (0-23). So AM/PM does not apply here. If you want AM/PM hours, you should use KK or hh instead. You can see documentation here.
在您的 SimpleDateFormat 中,您有 HH 来指定小时数,如文档中所述,HH 代表 - 一天中的小时数 (0-23)。所以 AM/PM 在这里不适用。如果您想要 AM/PM 时间,则应改用 KK 或 hh。您可以在此处查看文档。