验证字符串作为日期并转换为Joda DateTime

时间:2013-03-15 00:06:33

标签: jodatime

我想以“yyyy-MM-dd HH:mm:ss”的形式将字符串转换为joda DateTime。字符串应该是两种格式之一,“yyyy-MM-dd HH:mm:ss”或“yyyy-MM-dd”,虽然它是用户输入,所以如果不是,我可能需要将它踢回去两种格式。如何检查没有时间戳的情况并将其附加到00:00:00?以下是我给出完整日期和时间的代码。

    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    DateTime formattedDate= formatter.parseDateTime(dateString);

2 个答案:

答案 0 :(得分:0)

你不能检查字符串的长度吗?

if ( dateString.length() == "yyyy-MM-dd".length() )
    dateString += "00:00:00";

答案 1 :(得分:0)

java.time

仅供参考,Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。请参阅Tutorial by Oracle

ISO 8601

您的输入字符串几乎符合标准ISO 8601格式。为了符合要求,将 SPACE 替换为T。在解析/生成字符串时,java.time类默认使用标准格式。因此无需指定格式化模式。如果输入是仅日期类型,则replace无效。

String input = "2017-01-23 12:34:56".replace( " " , "T" ) ;  // Replace SPACE with `T` to comply with ISO 8601.
String input = "2017-01-23".replace( " " , "T" ) ;  // Has no effect.

各种输入

要同时处理日期或日期时间输入,请test for length或尝试解析和陷阱以进行异常。

if( input.length() == 10 ) {
    LocalDate ld = LocalDate.parse( input ) ;
} else {
    LocalDateTime ldt = LocalDateTime.parse( input ) ;
}

区/偏移

请注意,LocalDateTime故意缺少任何来自UTC和UTC的偏移量。时区。如果已知您的情况是偏移或区域,请指定创建OffsetDateTimeZonedDateTime对象。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime z = ldt.atZone( z ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*类。

从哪里获取java.time类?

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore