需要在java中以不同格式格式化字符串日期[关闭]
Posted
技术标签:
【中文标题】需要在java中以不同格式格式化字符串日期[关闭]【英文标题】:Need to Format String Date in different format in java [closed] 【发布时间】:2019-08-30 07:59:38 【问题描述】:我有一个字符串日期“2019 年 8 月 30 日”。我想格式化为“2019-08-30”。 我正在尝试使用以下代码。它不工作。
字符串输入 =“2019 年 8 月 30 日”; 日期日期 = sdf.parse(input);
// Date to String:
String strDate = sdf.format(date);
System.out.println(strDate);
我收到一个错误 线程“main”java.text.ParseException 中的异常:无法解析的日期:“2019 年 8 月 30 日”
请帮助我,如何进行?
【问题讨论】:
仅供参考,非常麻烦的日期时间类,例如java.util.Date
、java.util.Calendar
和 java.text.SimpleDateFormat
现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle。
最好的方法是to create a Minimal, Reproducible Example 并将其发布在您的问题中。根据您迄今为止发布的信息,我们无法判断问题所在,因此无法为您提供指导。您提到的异常并非来自您发布的代码。
【参考方案1】:
tl;博士
您正在使用糟糕的日期时间类,这些类在几年前因采用 JSR 310 而过时。请改用java.time.LocalDate
。
并且您忽略了指定格式模式以匹配您的输入字符串。我们在这里使用DateTimeFormatter
类这样做。
LocalDate
.parse(
"30 Aug 2019" ,
DateTimeFormatter.ofPattern( "d MMM uuuu" ).withLocale( Locale.US )
)
.toString()
2019-08-30
java.time
LocalDate
类表示仅日期值,没有时间,也没有 time zone 或 offset-from-UTC。
在您的 DateTimeFormatter
上指定 Locale
以确定翻译月份名称等所需的人类语言和文化规范。
String input = "30 Aug 2019" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "d MMM uuuu" ).withLocale( Locale.US ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
看到这个code run live at IdeOne.com。
ld.toString(): 2019-08-30
关于java.time
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date
、Calendar
和 SimpleDateFormat
。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.*
类。
从哪里获得 java.time 类?
Java SE 8、Java SE 9、Java SE 10、Java SE 11 和更高版本 - 具有捆绑实现的标准 Java API 的一部分。 Java 9 添加了一些小功能和修复。 Java SE 6 和 Java SE 7 大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7。 Android java.time 类的 android 捆绑包实现的更高版本。 对于早期的 Android (ThreeTenABP 项目适应 ThreeTen-Backport(如上所述)。见How to use ThreeTenABP…。ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval
、YearWeek
、YearQuarter
和more。
【讨论】:
【参考方案2】:虽然您应该使用 java.time
类,但要回答您的问题,您需要 2 个 SimpleDateFormats;一个用于解析,一个用于格式化:
SimpleDateFormat sdfIn = new SimpleDateFormat("dd MMM yyyy");
SimpleDateFormat sdfOut = new SimpleDateFormat("yyyy-MM-dd");
Date date = sdfIn.parse("30 Aug 2019");
String strDate = sdfOut.format(date);
System.out.println(strDate); // 2019-08-30
【讨论】:
以上是关于需要在java中以不同格式格式化字符串日期[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中以日期时间格式转换日期时间字符串
如何在 html 页面中以适当的格式显示 CPP、Java 或任何其他编程语言代码? [关闭]
如何在 BigQuery 中以字符串格式将工作日月份转换为日期?