我想将当前日期显示为00:50:32 A
这是我的代码
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss a");
String time = sdf.format(date);
System.out.println("time : " + time);
但它打印为:
time : 00:50:32 AM
我尝试了HH:mm:ss a
和HH:mm:ss aaa
,但结果是一样的。
答案 0 :(得分:4)
做不到!如果图案是4个字母或更少,则使用短格式。所以'a','aa','aaa'和'aaaa'完全相同。
您可以做的就是在没有“a”的情况下对其进行格式化,并手动添加“A”或“P”。
话虽如此,使用'HH'(24小时制)为什么需要AM / PM?
答案 1 :(得分:3)
我相信am / pm标记,“short”和“long”之间没有区别。
特别是,DateFormatSymbols.getAmPmStrings()
只返回两个字符串 - 并且没有getShortAmPmStrings()
调用或类似的内容。
答案 2 :(得分:1)
引用Javadoc of SimpleDateFormat:
用于格式化,如果是数字 模式字母是4或更多,完整 形式使用;否则短期或 如果可用,则使用缩写形式
因此:
(a)如果您希望看到差异,请使用aaaa
(4 x a
)而不是aaa
(4 x a
)。
(b)鉴于AM / PM没有简短形式(或长形式),那么对于a
说明符,重复次数无关紧要。
为了更加彻底,我运行了以下程序。它发现零格式受影响的情况。
Date date = new Date();
int n = 0;
for (String country : Locale.getISOCountries()) {
for (String language : Locale.getISOLanguages()) {
Locale loc = new Locale(language, country);
String as = "";
String prev = null;
for (int i = 0; i < 20; ++i) {
++n;
as += "a";
String current = new SimpleDateFormat(as, loc).format(date);
if (prev != null && !prev.equals(current)) {
System.out.println("Locale: " + loc + ", as=" + as + ", current="
+ prev + ", next=" + current);
}
prev = current;
}
}
}
System.out.println("Tried out " + n + " combinations.");
答案 3 :(得分:0)
没有区别,你期望有什么不同?
基于此网站(http://javatechniques.com/blog/dateformat-and-simpledateformat-examples /):
“a” - &gt; “AM”
“aa” - &gt; “AM”
答案 4 :(得分:0)
然后您拥有的选项是
time = time.substring(0,time.length()-1);
:)傻但会工作