riz*_*z86 7 java calendar date date-arithmetic date-difference
我想使用Date和Calendar类来计算java中两个日期/时间之间的差异.我的格式是"2012-01-24 12:30:00 PM".
我已经实现了我自己的方法,并且谷歌它与其他人合作,但没有得到正确的提示来处理AM和PM值.
只要时间有12(上午/下午),日期/时间差就会受到影响.例如,如果我有日期/时间"2012-01-24 12:30:00 PM"和"2012-01-24 02:30:00 PM",则显示差异为10小时.
考虑到此链接上的代码,如何修改它以处理AM和PM.
要将字符串日期转换为日期,请使用以下代码:
String sessionTimeStart = "2012-01-24 12:30:00 PM";
String sessionTimerEndOrCurrent = "2012-01-24 02:30:00 PM";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
Date d1 = null;
Date d0 = null;
try {
d1 = format.parse(sessionTimeStart);
d0 = format.parse(sessionTimerEndOrCurrent);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
问题是你的日期格式:而不是yyyy-MM-dd HH:mm:ss a使用yyyy-MM-dd hh:mm:ss a.
HH将是一天中的小时(0-23),而hh将是上午/下午(1-12)的小时.因此,您的日期格式02:30:00将被解析为而不是转换为PM版本(在一天中的小时将是14:30:00).
之所以显示10个小时的差异,是因为解析输入时模式中有错误。
这是一个使用示例SimpleDateFormat:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss a");
Date date1 = df.parse("2012-01-24 12:30:00 PM");
Date date2 = df.parse("2012-01-24 02:30:00 PM");
long differenceInHours = Math.abs(date1.getTime() - date2.getTime()) / 1000 / 60 / 60);
Run Code Online (Sandbox Code Playgroud)
会回来的10。
当我们只是稍微更改日期格式模式时,使用hh上午/下午(1-12)中HH的小时,而不是白天(0-23)中的小时:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Run Code Online (Sandbox Code Playgroud)
返回(预期)2。
请参阅文档SimpleDateFormat以获取正确的模式。
| 归档时间: |
|
| 查看次数: |
10788 次 |
| 最近记录: |