Alw*_*ner 4 java date jdk1.6 simpledateformat
这是我原来的代码 -
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);
Run Code Online (Sandbox Code Playgroud)
这是我的输出 -
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 AM
Run Code Online (Sandbox Code Playgroud)
和之间存在AM-PM差异.现在我把代码更改为-oldDatenewDateDateFormat
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a");
DateFormat df = new SimpleDateFormat("dd MMM yyyy hh:mm a", locale);
Run Code Online (Sandbox Code Playgroud)
我得到了预期的输出,这是 -
oldDate = 23 Dec 2015 1:4 PM
newDate = 23 Dec 2015 01:04 PM
Run Code Online (Sandbox Code Playgroud)
我知道这HH表示24小时格式并hh表示12小时格式.
我的问题是
如果我使用HH:mm a而不是hh:mm a,这不应该以24小时格式返回时间吗?
(要么)
如果它默认为12小时格式,根据提供的日期输入,它不应该返回相应的AM/PM标记吗?
这只是为了我的理解.
Mr.*_*jun 11
更新的答案
问题出在这里 Program flow
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
Run Code Online (Sandbox Code Playgroud)
这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);
Run Code Online (Sandbox Code Playgroud)
这就是它打印的原因
newDate = 23 Dec 2015 01:04 AM
Run Code Online (Sandbox Code Playgroud)
如果你改变了这条线
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm a");
Run Code Online (Sandbox Code Playgroud)
同
SimpleDateFormat formatter = new SimpleDateFormat("dd MMM yyyy hh:mm a");
Run Code Online (Sandbox Code Playgroud)
一切都会顺利进行!
注意:创建语言环境时,应将语言代码传递给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.
Run Code Online (Sandbox Code Playgroud)
而ahh:mm a或HH:mm a是Am/pm标记,有关详细信息,请转到链接