日期格式将第12小时值(hh)解析为00,同时将格式应用为“yyyy-MM-dd'T'hh:mm:ss”,但它不解析第13个小时到下午1点。 PFB示例代码段。
Date testDate = DateUtil.parse("yyyy-MM-dd'T'hh:mm:ss", "2010-07-09T12:50:58");
你可以告诉我为什么会这样转换吗?
答案 0 :(得分:8)
您应该使用HH
代替hh
。前者用于24小时制,后者用于12小时制。
请参阅javadoc for SimpleDateFormat。
编辑:请注意问题可能也在另一端。要从java.util.Date
获取小时,您可以在Calendar
对象上设置它并拨打get(Calendar.HOUR_OF_DAY)
。请注意,get(Calendar.HOUR)
将为您提供12小时而不是24小时。
答案 1 :(得分:1)
DateFormat inputFormatter = new SimpleDateFormat(
"yyyy-MM-dd'T'hh:mm:ss");
Date date = inputFormatter.parse("2010-07-09T13:50:58");
DateFormat outputFormatter = new SimpleDateFormat(
"yyyy-MM-dd'T'hh:mm:ss a");
System.out.println(outputFormatter.format(date));
输出结果为:
2010-07-09T01:50:58 PM
读取13,并输出01(PM)。
答案 2 :(得分:0)
当您正在阅读带有时区的时间并使用您的语言环境打印时,系统会将时间转换为您在乌拉圭的当地时间。
您需要创建包含自定义区域设置和时区的日历,以保持其一致性:
public static void main(String[] args) throws ParseException {
String dateStr = "Tue, 04 Aug 2015 12:09:10 GMT";
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz", Locale.ENGLISH);
Date d = format.parse(dateStr);
System.out.println("The current time is: " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds());
Calendar cal = new GregorianCalendar(TimeZone.getTimeZone("GMT"), Locale.ENGLISH);
cal.setTime(d);
System.out.println("The current time is: " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND));
}