当前位置: 首页 > 知识库问答 >
问题:

SimpleDateFormat("dd/MM/yy kk: mm")显示时间为24:30而不是00:30[重复]

汝昀
2023-03-14

我必须以24小时格式从API转换日期,但SimpleDateFormat(“dd/MM/yy kk: mm”)显示的是24:30而不是00:30。

我收到的日期是这样的格式:“2020-05-25 10:34:27”

我将日期转换如下:

      val newDate: Date =  SimpleDateFormat("yyyy-MM-dd hh:mm:ss", 
    Locale.getDefault()).parse(vehiculos[b].fecha)
    val d = SimpleDateFormat("yyyy-MM-dd kk:mm", Locale.getDefault())
            .parse(SimpleDateFormat("yyyy-MM-dd HH:mm:ss", 
    Locale.getDefault()).format(newDate))
    val newFecha = SimpleDateFormat("dd/MM/yy kk:mm", Locale.getDefault()).format(d)

共有2个答案

白坚壁
2023-03-14

考虑使用java。时间,现代Java日期和时间API,用于日期和时间工作。使用java。时间将日期和时间保存在本地日期时间对象中。LocalDateTime是一天中的日期和时间,与UTC之间没有时区偏移。您还可以考虑使用带有时区的日期和时间。

当您从API收到字符串时,解析它。我正在演示如何使用此格式化程序:

private static final DateTimeFormatter API_PARSER
        = new DateTimeFormatterBuilder().append(DateTimeFormatter.ISO_LOCAL_DATE)
                .appendLiteral(' ')
                .append(DateTimeFormatter.ISO_LOCAL_TIME)
                .toFormatter(Locale.ROOT);

解析过程如下所示。为了进行演示,我花了一天中的一段时间,时间为00小时,以便我们可以检查格式化后它们是否为24小时。

    String fromApi = "2020-05-25 00:34:27";
    LocalDateTime dateTime = LocalDateTime.parse(fromApi, API_PARSER);
    System.out.println(dateTime);

此代码段的输出为:

2020-05-25T00:34:27

只有当您需要提供字符串输出时,例如给用户,才能格式化我们进入字符串的LocalDateTime。为此,我们需要第二个格式化程序:

private static final DateTimeFormatter NEW_FORMATTER
        = DateTimeFormatter.ofPattern("dd/MM/yy HH:mm", Locale.ROOT);

有了它,我们可以做到:

    String formattedDateTime = dateTime.format(NEW_FORMATTER);
    System.out.println(formattedDateTime);

25/05/20 00:34

我们得到了所需的00小时。

Java语言时间在旧的和新的Android设备上都能很好地工作。它至少需要Java 6。

  • 在Java 8及更高版本和更新的Android设备上(API级别26),内置了现代API
  • 在大多数情况下,试图将日期和时间从一种字符串格式转换为另一种格式是错误的方法。不要把日期和时间作为字符串。保留适当的日期时间对象。例如,ZonedDateTime或LocalDateTime
  • Oracle教程:日期时间解释如何使用java.time.
  • Java规范请求(JSR)310,其中首先描述了java.time
  • Threeten Backport项目,将java.time反向移植到Java6和7(Threeten for JSR-310)。
  • Java8个API可通过脱糖
  • ThreeTenABP,Android版的Threeten Backport
  • 问题:如何在Android Project中使用ThreeTenABP,有非常透彻的解释。
  • 相关问题:SimpleDateFormat上java HH: mm和hh: mm的区别
金高飞
2023-03-14

您应该使用大写字母K

SimpleDateFormat("dd/MM/yy KK:mm", Locale.getDefault())

k: 一天中的小时数(1-24)

K:小时在上午/下午(0-11)

查看此网站进行测试:http://www.sdfonlinetester.info/

 类似资料: