我需要将包含日期的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);
上面的代码引发了一个异常。
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();
}
这是一个常见的错误,因为人们错误地认为日期有格式,但实际上并没有。
日期/时间对象只有值,这些值(通常是数字)表示日期(日历中的特定点)和时间(一天中的特定时刻)的概念。
如果你有一个String
,那么你实际上没有日期。您有一个表示日期的文本(一系列字符)。请注意,下面的所有字符串都是不同的(它们有不同的字符序列),但都代表相同的日期(相同的值,日历中的相同点):
2018-03-20 09:31:31
2018年3月20日上午9:31:31
(使用美国的格式:月/日/年)2018年3月20日星期二上午09:31:31
你要做的是得到一种格式(一个字符串
,一个文本代表一个日期)并将其转换为另一种格式(另一个字符串
,另一个不同的字符序列代表同一个日期)。
在Java(以及许多其他语言-如果不是全部-顺便说一句),你必须分两步完成:
字符串
转换为日期/时间对象(将文本转换为数值)解析方法就是这样做的也就是说,当调用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))。
您必须使用两个格式化程序
,一个用于将字符串
转换为本地日期时间
,另一个用于根据需要格式化此日期:
从字符串到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”。 那我该如何解