这是我原来的代码 -
String dateString = "23 Dec 2015 1:4 PM"; Locale locale = new Locale("en_US"); SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a"); DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm a", locale); Date date = null; try { date = formatter.parse(dateString); } catch (ParseException e) { LOGGER.error(e); } String newDate = df.format(date); System.out.println("oldDate = " + dateString); System.out.println("newDate = " + newDate);
这是我的输出 -
oldDate = 23 Dec 2015 1:4 PM newDate = 23 Dec 2015 01:04 AM
和之间存在AM-PM差异.现在我把代码更改为-oldDate
newDate
DateFormat
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a"); DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm a", locale);
我得到了预期的输出,这是 -
oldDate = 23 Dec 2015 1:4 PM newDate = 23 Dec 2015 01:04 PM
我知道这HH
表示24小时格式并hh
表示12小时格式.
我的问题是
如果我使用HH:mm a
而不是hh:mm a
,这不应该以24小时格式返回时间吗?
(要么)
如果它默认为12小时格式,根据提供的日期输入,它不应该返回相应的AM/PM标记吗?
这只是为了我的理解.
更新的答案
问题出在这里 Program flow
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
这simple date formatter
用于格式化Date对象的日期字符串,这是答案的重要部分
当您使用HH代替HH的SimpleDateFormater认为提供日期字符串是24-Hour Format
,只是忽略了AM/PM marker
这里.
从这个SimpleDateFormatter构造的Date对象被传递给
DateFormat df = new SimpleDateFormat("dd MMM yyyy HH:mm a", locale);
这就是它打印的原因
newDate = 23 Dec 2015 01:04 AM
如果你改变了这条线
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
同
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a");
一切都会顺利进行!
注意:创建语言环境时,应将语言代码传递给Locale()构造函数.en-us
没有en_us
.
IMP:Code 也在Java 8上进行了测试.Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
hh:mm和HH之间的差异:mm:
HH:mm => will look like 00:12, 23:00... this has 24 hour format. hh:mm => will look like 01:00Am, 02:00Am,...01:00pm this has 12 hour format.
而a
hh:mm a或HH:mm a是Am/pm标记,有关详细信息,请转到链接