乔达时间:如何将string转换为LocalDate?
如何指定格式string来将string中的date单独转换。 就我而言,只有date部分是相关的
构造它为DateTime
失败:
String dateString = "2009-04-17"; DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); DateTime dateTime = formatter.parseDateTime(dateString);
错误java.lang.IllegalArgumentException: Invalid format: "2011-04-17" is too short
可能因为我应该使用LocalDate
来代替。 但是,我没有看到LocalDate
格式化程序。 什么是最好的方法来转换String dateString = "2009-04-17";
到LocalDate
(或其他东西,如果这不是正确的表示)
谢谢…
您可能正在寻找LocalDate(Object)
。 这是有点混乱,因为它需要一个通用的Object
,但文档指出,它会使用一个ConverterManager
知道如何处理一个String
如果你传递一个String
给构造函数,例如
LocalDate myDate = new LocalDate("2010-04-28");
使用parse(String)
方法。
LocalDate date = LocalDate.parse("2009-04-17");
使用LocalDate.parse()
或new LocalDate()
有一个微妙的错误问题。 代码片段胜过千言万语。 在下面的scala repl示例中,我想以string格式yyyyMMdd获取本地date。 LocalDate.parse()
很乐意给我一个LocalDate的实例,但它不是正确的( new LocalDate()
具有相同的行为):
scala> org.joda.time.LocalDate.parse("20120202") res3: org.joda.time.LocalDate = 20120202-01-01
我在2016年2月2日以yyyyMMdd的格式提交,我收到20120201年1月1日的date。我在这里出去走走:我不认为这是应该做的。 Joda使用“yyyy-MM-dd”作为默认值,但隐含地接受一个没有“ – ”字符的string,想当年1月1日? 这对我来说似乎不是一个合理的默认行为。
鉴于此,在我看来,使用一个不容易被愚弄的jodadate格式化程序是parsingstring的更好的解决scheme。 此外,如果date格式不是“yyyy-MM-dd”, LocalDate.parse()
应该会引发exception:
scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyyMMdd") format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@56826a75 scala> org.joda.time.LocalDate.parse("20120202", format) res4: org.joda.time.LocalDate = 2012-02-02
这将导致其他格式失败,所以你不会得到这个奇怪的错误行为:
scala> val format = org.joda.time.format.DateTimeFormat.forPattern("yyyy-MM-dd") format: org.joda.time.format.DateTimeFormatter = org.joda.time.format.DateTimeFormatter@781aff8b scala> org.joda.time.LocalDate.parse("20120202", format) java.lang.IllegalArgumentException: Invalid format: "20120202" is too short at org.joda.time.format.DateTimeFormatter.parseLocalDateTime(DateTimeFormatter.java:900) at org.joda.time.format.DateTimeFormatter.parseLocalDate(DateTimeFormatter.java:844) at org.joda.time.LocalDate.parse(LocalDate.java:179) ... 65 elided
这比在20120202年返回一个date更为理智。
在我的情况下,传入的string可能是两种格式之一。 所以我首先尝试用更具体的格式parsingstring:
String s = "2016-02-12"; LocalDateTime ldt; try { ldt = LocalDateTime.parse(s, DateTimeFormat.forPattern("YYYY-MM-dd HH:mm")); } catch (IllegalArgumentException e) { ldt = LocalDateTime.parse(s, DateTimeFormat.forPattern("YYYY-MM-dd")); }
这对我工作:
LocalDate d1 = LocalDate.parse("2014-07-19"); LocalDate dNow = LocalDate.now(); // Current date
您可以使用LocalDate.of
作为单独的parameter passing年份,月份和date:
LocalDate date1 = LocalDate.of(2009, 4, 17); LocalDate date2 = LocalDate.of(2009, Month.APRIL, 17);