将日期或日历类型转换为字符串格式

时间:2013-06-26 12:18:03

标签: java date calendar type-conversion

所以,基本上我试图在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的情况下实现这一目标。仅需要在日期,字符串和日历类型中进行操作

3 个答案:

答案 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, ':');
    };

请参阅this post for more

答案 1 :(得分:0)

SimpleDateFormat模式

"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"

答案 2 :(得分:0)

TL;博士

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

现代方法使用 java.time 类而不是麻烦的旧遗留日期时间类。避免使用DateCalendarSimpleDateFormat

ISO 8601

您想要的格式恰好是标准的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.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