2

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

4

5 回答 5

5

做不到!如果模式为 4 个字母或更少,则使用短格式。所以'a','aa','aaa'和'aaaa'是相同的。

您所能做的就是在没有'a'的情况下对其进行格式化,然后手动添加'A'或'P'。

话虽如此,使用“HH”(24 小时制)为什么需要 AM/PM?

于 2011-05-05T06:12:39.653 回答
4

我相信对于上午/下午标记,“短”和“长”之间没有区别。

特别是,DateFormatSymbols.getAmPmStrings()只返回两个字符串 - 并且没有getShortAmPmStrings()调用或类似的东西。

于 2011-05-05T06:07:20.400 回答
1

引用SimpleDateFormat 的 Javadoc

对于格式,如果模式字母的数量为 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.");    
于 2011-05-05T06:10:31.443 回答
0

没有区别,您期望有什么不同?

基于此站点(http://javatechniques.com/blog/dateformat-and-simpledateformat-examples/):

“一”->“上午”</p>

“aa” -> “上午”</p>

于 2011-05-05T06:10:08.493 回答
0

那么你的选择是

time = time.substring(0,time.length()-1);

:) 很傻,但会起作用

于 2011-05-05T06:11:43.053 回答