Goo*_*oey 44 java parsing date simpledateformat
我正在尝试将yyyy-MM-dd'T'HH:mm:ss.SSSz格式的日期格式化为yyyy-mm-dd HH:mm:ss,这应该很容易,但我不能让它工作.
必须解析的日期格式为:2012-10-01T09:45:00.000 + 02:00
现在我使用这个简单的日期格式化程序来格式化它:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz", Locale.FRANCE);
Run Code Online (Sandbox Code Playgroud)
但是这给出了类似于2012-10-01T09的输出:45:00.000UTC + 00:00.
我也尝试使用"yyyy-MM-dd'T'HH:mm:ss.SSSZ"作为模式和"yyyy-MM-ddHH:mm:ss".后者以2012-10-01T09:45:00的形式返回日期,但尚未结束.
我认为将T分离出来会有点乱,并且无缘无故地创造开销,那么格式化这些日期的正确方法是什么?
为了说明我想将2012-10-01T09:45:00.000 + 02:00转换成2012-10-01 09:45:00
干杯!
ctl*_*evi 79
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = sdf.parse(time);
String formattedTime = output.format(d);
Run Code Online (Sandbox Code Playgroud)
这有效.你必须使用两个SimpleDateFormats,一个用于输入,一个用于输出,但它会为你提供你想要的东西.
Bas*_*que 11
我们有针对这个问题的新技术:Java 8及更高版本中内置的java.time框架.
您的输入字符串采用标准ISO 8601格式.默认情况下,在java.time类中使用该标准来解析/生成日期时间值的文本表示.
OffsetDateTime odt = OffsetDateTime.parse( "2012-10-01T09:45:00.000+02:00" );
Run Code Online (Sandbox Code Playgroud)
你的问题建议你要截断一整秒.
OffsetDateTime odtTruncatedToWholeSecond = odt.truncatedTo( ChronoUnit.SECONDS );
Run Code Online (Sandbox Code Playgroud)
您似乎想要省略偏移和时区信息.预定义的格式化程序就是DateTimeFormatter.ISO_LOCAL_DATE_TIME这样做的.
显然你想在中间使用一个空间而不是标准空间T.您可以为此定义自己的格式化程序,但我只是执行字符串操作来替换TSPACE.
String output = odtTruncatedToWholeSecond.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ).replace( "T" , " " );
Run Code Online (Sandbox Code Playgroud)
正如对该问题的评论所暗示的那样,严格来说,您可以通过仅处理字符串而不转换为任何日期时间对象来实现目标.但是我在这里提供这个答案,假设您可能有其他业务逻辑来处理这些日期时间值.
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
小智 8
Gooye如果可以在你的项目中使用Joda Time,那么这段代码对我有用:
String dateStr = "2012-10-01T09:45:00.000+02:00";
String customFormat = "yyyy-MM-dd HH:mm:ss";
DateTimeFormatter dtf = ISODateTimeFormat.dateTime();
LocalDateTime parsedDate = dtf.parseLocalDateTime(dateStr);
String dateWithCustomFormat = parsedDate.toString(DateTimeFormat.forPattern(customFormat));
System.out.println(dateWithCustomFormat);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
261456 次 |
| 最近记录: |