我想以“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);
答案 0 :(得分:0)
你不能检查字符串的长度吗?
if ( dateString.length() == "yyyy-MM-dd".length() )
dateString += "00:00:00";
答案 1 :(得分:0)
仅供参考,Joda-Time项目现在位于maintenance mode,团队建议迁移到java.time课程。请参阅Tutorial by Oracle。
您的输入字符串几乎符合标准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的偏移量。时区。如果已知您的情况是偏移或区域,请指定创建OffsetDateTime
或ZonedDateTime
对象。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime z = ldt.atZone( z ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance 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的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。