【问题标题】:Difference between java HH:mm and hh:mm on SimpleDateFormatSimpleDateFormat 上的 java HH:mm 和 hh:mm 之间的区别
【发布时间】:2013-06-24 20:09:59
【问题描述】:

kk:mm、HH:mm 和 hh:mm 格式有什么区别??

    SimpleDateFormat broken = new SimpleDateFormat("kk:mm:ss");
    broken.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    SimpleDateFormat working = new SimpleDateFormat("HH:mm:ss");
    working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));
    SimpleDateFormat working2 = new SimpleDateFormat("hh:mm:ss");
    working.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

    System.out.println(broken.format(epoch));
    System.out.println(working.format(epoch));
    System.out.println(working2.format(epoch));

打印:

24:00:00
00:00:00
05:30:00

【问题讨论】:

  • 仅供参考,麻烦的旧日期时间类,如 java.util.Datejava.util.Calendarjava.text.SimpleTextFormat 现在是 legacy,被 java.time 类取代。见Tutorial by Oracle
  • 您在working 上设置了两次时区,而在working2 上没有设置任何时区。这可能是您的第三个结果不同的原因。

标签: java date format


【解决方案1】:

kk: (01-24) 看起来像 01, 02..24。

HH:(00-23) 看起来像 00, 01..23。

hh:(上午/下午的 01-12)看起来像 01、02..12。

所以最后的打印输出 (working2) 有点奇怪。应该说 12:00:00 (编辑:如果您设置 working2 时区和格式,(正如 kdagli 指出的那样)您不是)

【讨论】:

    【解决方案2】:

    请看here

    HH 是一天中的小时(从 0 到 23)

    hh 是上午/下午格式的小时

    kk 是一天中的小时(从 1 到 24)

    mm 是小时中的分钟

    ss 是一分钟的秒数

    【讨论】:

    • 感谢您拯救这一天的伙伴!如果不是因为这个,就会遇到刺激问题!
    • @AdeshSrivastava 我们中的一些人在遇到产品问题后去了这里 :)
    【解决方案3】:

    其实最后一个并不奇怪。代码正在为 working 而不是 working2.

    设置时区。

    SimpleDateFormat working2 = new SimpleDateFormat("hh:mm:ss"); 工作.setTimeZone(TimeZone.getTimeZone("Etc/UTC"));

    kk 从 1 到 24,HH 从 0 到 23,hh 从 1 到 12 (AM/PM)。

    修复此错误给出:

    24:00:00
    00:00:00
    01:00:00
    

    【讨论】:

      【解决方案4】:

      小时/小时 = 12/24 小时 表示您将编写 hh:mm = 12 小时格式和 HH:mm = 24 小时格式

      【讨论】:

        【解决方案5】:

        使用内置的本地化格式

        如果这是为了向用户显示一天中的某个时间,那么在 20 个中至少有 19 个不需要关心 kkHHhh。我建议你使用这样的东西:

            DateTimeFormatter defaultTimeFormatter
                    = DateTimeFormatter.ofLocalizedTime(FormatStyle.SHORT);
            System.out.format("%s: %s%n",
                    Locale.getDefault(), LocalTime.MIN.format(defaultTimeFormatter));
        

        关键是它在不同的默认语言环境中提供不同的输出。例如:

        en_SS: 12:00 AM
        fr_BL: 00:00
        ps_AF: 0:00
        es_CO: 12:00 a.m.
        

        本地化格式的设计符合不同文化的期望。因此,它们通常会为用户提供更好的体验,并且让您不必编写格式模式字符串,这总是容易出错。

        我还建议你不要使用SimpleDateFormat。这个类是出了名的麻烦,幸运的是已经过时了。相反,我使用 java.time,现代 Java 日期和时间 API。使用起来感觉好多了。

        小时的四个模式字母:H、h、k 和 K

        当然,如果您需要解析具有指定格式的字符串,并且如果您有非常具体的格式要求,最好使用格式模式字符串。小时实际上有四种不同的模式字母可供选择(引用自文档):

          Symbol  Meaning                     Presentation      Examples
          ------  -------                     ------------      -------
           h       clock-hour-of-am-pm (1-12)  number            12
           K       hour-of-am-pm (0-11)        number            0
           k       clock-hour-of-day (1-24)    number            24
           H       hour-of-day (0-23)          number            0
        

        在实践中使用Hh。据我所知kK 不是(为了完整起见,它们可能只是被包括在内)。但让我们看看它们都在行动:

            DateTimeFormatter timeFormatter
                    = DateTimeFormatter.ofPattern("hh:mm a  HH:mm  kk:mm  KK:mm a", Locale.ENGLISH);
            System.out.println(LocalTime.of(0, 0).format(timeFormatter));
            System.out.println(LocalTime.of(1, 15).format(timeFormatter));
            System.out.println(LocalTime.of(11, 25).format(timeFormatter));
            System.out.println(LocalTime.of(12, 35).format(timeFormatter));
            System.out.println(LocalTime.of(13, 40).format(timeFormatter));
        
        12:00 AM  00:00  24:00  00:00 AM
        01:15 AM  01:15  01:15  01:15 AM
        11:25 AM  11:25  11:25  11:25 AM
        12:35 PM  12:35  12:35  00:35 PM
        01:40 PM  13:40  13:40  01:40 PM
        

        如果您不想要前导零,只需指定一个模式字母,即h 而不是hhH 而不是HH。解析时仍然接受两位数,如果要打印的数字大于9,仍然会打印两位数。

        链接

        【讨论】:

          猜你喜欢
          • 2016-03-29
          • 1970-01-01
          • 1970-01-01
          • 2018-05-19
          • 1970-01-01
          • 2014-12-31
          • 2022-01-01
          • 1970-01-01
          • 2023-04-09
          相关资源
          最近更新 更多