所以,基本上我试图在String中实现以下格式:
2012-06-17T08:00:00.000+01:00
我以字符串格式获取原始日期,然后我将其解析为不同的格式。
当我使用格式为(yyyy-MM-dd'T'HH:mm:ss.sssZ)的SimpleDateFormat时,我得到以下输出:
2013-06-17T07:00:00.000+0530
这里+0530应该是+05:30
当我将上述日期设置为日历类型然后将其转换为字符串时,我会得到以下格式:
2013-06-17T07:00:00+05:30
在这里我没有得到.000秒。
如何在不使用JodaTime的情况下实现这一目标。仅需要在日期,字符串和日历类型中进行操作
答案 0 :(得分:2)
首先在格式化程序中使用额外的:
使用XXX,并使用大写S
来获取毫秒
SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX")
更新:以上版本无法在1.6
上运行哟可以尝试以下方法
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
{
public StringBuffer format(Date date, StringBuffer toAppendTo, java.text.FieldPosition pos)
{
StringBuffer toFix = super.format(date, toAppendTo, pos);
return toFix.insert(toFix.length()-2, ':');
};
答案 1 :(得分:0)
SimpleDateFormat模式
"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
答案 2 :(得分:0)
OffsetDateTime.parse( "2012-06-17T08:00:00.000+01:00" ) // Parse string in standard ISO 8601 format to an object.
.format( // Generate a String representing the value of that `OffsetDateTime` object.
DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX" ) // Specify a formatting pattern to force the seconds and fractional second even if zero.
) // Return a `String` object.
2012-06-17T08:00:00.000 + 01:00
现代方法使用 java.time 类而不是麻烦的旧遗留日期时间类。避免使用Date
,Calendar
和SimpleDateFormat
。
您想要的格式恰好是标准的ISO 8601格式。解析/生成字符串时, java.time 类默认使用标准格式。因此无需指定格式化模式。
OffsetDateTime
您的输入字符串包含偏移偏移但不包括时区。因此我们将其解析为OffsetDateTime
对象。
OffsetDateTime odt = OffsetDateTime.parse( "2012-06-17T08:00:00.000+01:00" ) ;
要生成相同标准ISO 8601格式的字符串,只需调用toString
即可。默认情况下,如果为零,则忽略最不重要的部分。因此,使用示例数据不会出现秒或小数秒。
String output = odt.toString() ;
2012-06-17T08:00 + 01:00
如果要强制秒和小数秒即使为零,也请指定格式化模式。
OffsetDateTime odt = OffsetDateTime.parse( "2012-06-17T08:00:00.000+01:00" );
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd'T'HH:mm:ss.SSSXXXXX" );
String output = odt.format( f );
2012-06-17T08:00:00.000 + 01:00
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。