在SimpleDateFormat中使用a和aaa的区别是什么

时间:2011-05-05 06:01:16

标签: java datetime formatting simpledateformat

我想将当前日期显示为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 aHH:mm:ss aaa,但结果是一样的。

5 个答案:

答案 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);

:)傻但会工作