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

格式为“MM/dd/yyyy HH:MM:ss a”的Java字符串到日期对象

邓丰
2023-03-14

我需要将包含日期的String转换为日期对象

字符串的格式将是“yyyy-mm-dd HH:mm:ss”,因此我想要“mm/dd/yyyy HH:mm:ss a”的格式。

String dateString = "2018-03-20 09:31:31";

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy HH:mm:ss a", 
                                                           Locale.ENGLISH);

LocalDate date = LocalDate.parse(dateString , formatter);

上面的代码引发了一个异常。


共有3个答案

李经国
2023-03-14
String dateString = "2018-03-20 09:31:31";
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

try {
    Date date = formatter.parse(dateInString);

    DateFormat df = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    String reportDate = df.format(date );
} catch (ParseException e) {
        e.printStackTrace();
}
毕黎昕
2023-03-14
匿名html" target="_blank">用户

这是一个常见的错误,因为人们错误地认为日期有格式,但实际上并没有。

日期/时间对象只有值,这些值(通常是数字)表示日期(日历中的特定点)和时间(一天中的特定时刻)的概念。

如果你有一个String,那么你实际上没有日期。您有一个表示日期的文本(一系列字符)。请注意,下面的所有字符串都是不同的(它们有不同的字符序列),但都代表相同的日期(相同的值,日历中的相同点):

  • 2018-03-20 09:31:31
  • 2018年3月20日上午9:31:31(使用美国的格式:月/日/年)
  • 2018年3月20日星期二上午09:31:31
  • 还有很多其他的

你要做的是得到一种格式(一个字符串,一个文本代表一个日期)并将其转换为另一种格式(另一个字符串,另一个不同的字符序列代表同一个日期)。

在Java(以及许多其他语言-如果不是全部-顺便说一句),你必须分两步完成:

  1. 字符串转换为日期/时间对象(将文本转换为数值)解析方法就是这样做的
  2. 将日期/时间对象转换为其他格式(将数值转换为其他文本)

也就是说,当调用parse方法时,您试图将字符串(文本、字符序列)转换为日期/时间对象。这意味着DateTimeFormatter必须具有与输入匹配的模式。

输入为2018-03-20 09:31:31,即年-月-日小时:分钟:秒。用于解析它的格式化程序具有模式MM/dd/yyyy HH: mm: ss a月/日/年小时:分钟:秒am/pm)。

您使用了输出模式(应该在步骤2中使用的模式)来解析输入。这就是为什么会出现一个例外:当输入实际包含一个年份,其中4位后跟一个-时,格式化程序试图解析一个带有2位数字和/的月份。

您必须为每个步骤使用不同的DateTimeFormatter,为每个案例使用正确的模式。YCF_L的答案有代码,我只想补充一点细节。用于输出(步骤2)的格式化程序是:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
        "MM/dd/yyyy HH:mm:ss a", Locale.ENGLISH
);

请注意,HH用于小时。看看javadoc,你会看到大写的HH表示一天中的小时字段(值从0到23-所以1 AM打印为01,1 PM打印为13)。

但是你也在打印AM/PM字段(模式中的a),所以你实际上需要的是小写的hh,它是AM-PM的时钟小时(值从1到12),甚至是KK(AM-PM的小时(值从0到11))。

佟英武
2023-03-14

您必须使用两个格式化程序,一个用于将字符串转换为本地日期时间,另一个用于根据需要格式化此日期:

从字符串到LocalDateTime:

String dateString = "2018-03-20 09:31:31";

LocalDateTime date = LocalDateTime.parse(
        dateString,
        DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH)
);

现在从LocalDateTime到String:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
        "MM/dd/yyyy HH:mm:ss a", Locale.ENGLISH
);

String newDate = date.format(formatter);
System.out.println(newDate);// 03/20/2018 09:31:31 AM

注意:您必须使用LocalDateTime而不仅仅是LocalDate,您的格式包含日期和时间,而不仅仅是日期,否则您将得到一个错误:

java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: HourOfDay
 类似资料:
  • 这将产生。但我需要的是。我的目的是使用Hibernate标准将此日期与数据库中的另一个日期进行比较。所以我需要格式的date对象。

  • 问题内容: 我在网络上阅读了更多问题,但还没有找到解决方案。 我有一个完全像这种格式的 字符串, 例如“ 14/05/1994”。 我需要以 相同的格式* 将其隐藏到 java.util.Date 中。 * 我试过了: 但结果是:1994年5月14日星期六星期六00:00:00 结果是:1994年5月14日不是字符串,而是java.util.Date? 问题答案: 一个不 具有 的格式。这只是个约

  • 我有一个格式为。我希望它的格式为 下面是我尝试进行此转换的示例util: 但是,我得到的输出不是格式。 请告诉我如何将从格式化为

  • 问题内容: 我正在将存储在日历对象中的日期转换为字符串,以便在MySQL中进行查询。我需要格式为“ yyyy-MM-dd HH:mm:ss”的字符串,即:“ 2010-01-01 15:30:00”。我正在使用类似的代码: 现在,该字符串的,而不是“2010 - 01 -01 15:30:00”像我所期望的是“2010 - 02 -01 15:30:00”。我已经在http://download.

  • 本文向大家介绍Javascript将字符串日期格式化为yyyy-mm-dd的方法,包括了Javascript将字符串日期格式化为yyyy-mm-dd的方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍的是利用Javascript将字符串日期格式化为yyyy-mm-dd的方法,下面话不多说了,参考如下代码 使用方法: 输出: 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家学习或

  • 问题内容: 我有多个具有生日的联系人,并且所有联系人都已与移动设备同步。现在的问题是所有联系人的生日格式都不同,我想以“ dd-MM- yyyy”之类的特定格式显示所有生日日期。 因此,例如,一个同步联系人的生日为“ 1990-02-07”或“ 1988-06-15T22:00:00.000Z”或“ 12-02-1990”等,则应显示所有这些日期以特定格式“ dd-MM-yyyy”。 那我该如何解