日期为UTC格式Java

我有一个像这样的字符串2013-10-22T01:37:56 。 我需要将此字符串更改为UTC日期格式,如MM/dd/yyyy KK:mm:ss a 。 我尝试了一些代码,但它没有返回UTC日期时间。

我的代码是

  String[] time = itsAlarmDttm.split("T"); String aFormatDate = time[0]+ " "+time[1]; String aRevisedDate = null; try { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); final Date dateObj = sdf.parse(aFormatDate); aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); System.out.println(aRevisedDate); } catch (ParseException e) { itsLogger.error("Error occured in Parsing the Data Time Object: " +e.getMessage()); } catch (Exception e) { itsLogger.error("Error occured in Data Time Objecct: " +e.getMessage()); } 

我得到的输出是MM/dd/yyyy KK:mm:ss a格式。 但不是UTC时间格式。 如何解决这个问题?

尝试使用Zz时区标志格式化日期:

 new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a Z").format(dateObj); 

试试这个…为我工作并打印10/22/2013 01:37:56 AM当然这只是你的代码,只需稍加修改。

 final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // This line converts the given date into UTC time zone final java.util.Date dateObj = sdf.parse("2013-10-22T01:37:56"); aRevisedDate = new SimpleDateFormat("MM/dd/yyyy KK:mm:ss a").format(dateObj); System.out.println(aRevisedDate); 

什么时区?

你的问题在哪里没有提到时区 。 输入字符串表示什么时区? 您想要什么时区输出? 而且, UTC是一个时区(或根据你的心态缺乏), 而不是字符串格式

ISO 8601

您的输入字符串采用ISO 8601格式,但它缺少与UTC的偏移量 。

乔达时间

以下是Joda-Time 2.3中的一些示例代码,向您展示如何处理时区。 Joda-Time具有内置的默认格式化程序,用于解析和生成日期时间值的字符串表示。

 String input = "2013-10-22T01:37:56"; DateTime dateTimeUtc = new DateTime( input, DateTimeZone.UTC ); DateTime dateTimeMontréal = dateTimeUtc.withZone( DateTimeZone.forID( "America/Montreal" ); String output = dateTimeMontréal.toString(); 

至于以其他格式生成字符串表示,请在StackOverflow中搜索“Joda格式”。

 SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss" ); // or SimpleDateFormat sdf = new SimpleDateFormat( "MM/dd/yyyy KK:mm:ss a Z" ); sdf.setTimeZone( TimeZone.getTimeZone( "UTC" ) ); System.out.println( sdf.format( new Date() ) );