2

我有一个日期为 UTC 格式的要求,例如:Thu Jan 1 19:30:00 UTC+0530 1970。我想转换为正常的日期格式dd-MM-yyyy HH:mm:ss。下面是我尝试过的代码。

DateFormat formatter = new SimpleDateFormat("E,MMM dd,yyyy h:mmaa");   
String today = formatter.format("Thu Jan 1 19:30:00 UTC+0530 1970");
SimpleDateFormat f = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date d = f.parse(masterDetailsJsonObject.get("cols1").toString());

但它会抛出一个异常,说无法解析的日期。请指导。提前致谢。

4

3 回答 3

3

你可以试试这个

    java.util.Date dt = new java.util.Date("Thu Jan 1 19:30:00 UTC+0530 1970");
    String newDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss").format(dt);
    System.out.println(""+newDateFormat);
于 2013-09-10T14:37:44.727 回答
2

乔达时间

使用第三方开源日期时间库Joda-Time,这种工作要容易得多。

请注意,与 java.util.Date 不同,Joda-Time DateTime 知道自己的时区。

这是一些使用 Joda-Time 2.3 的示例代码。

String input = "Thu Jan 1 19:30:00 UTC+0530 1970";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "EEE MMM dd HH:mm:ss 'UTC'Z yyyy" );

// Adding "withOffsetParsed()" means "set new DateTime's time zone offset to match input string".
DateTime dateTime = formatter.withOffsetParsed().parseDateTime( input );

// Convert to UTC/GMT (no time zone offset).
DateTime dateTimeUtc = dateTime.toDateTime( DateTimeZone.UTC );

// Convert to India time zone. That is +05:30 (notice half-hour difference).
DateTime dateTimeIndia = dateTimeUtc.toDateTime( DateTimeZone.forID( "Asia/Kolkata" ) ); 

转储到控制台...</p>

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTimeUtc: " + dateTimeUtc );
System.out.println( "dateTimeIndia: " + dateTimeIndia );

运行时……</p>

dateTime: 1970-01-01T19:30:00.000+05:30
dateTimeUtc: 1970-01-01T14:00:00.000Z
dateTimeIndia: 1970-01-01T19:30:00.000+05:30

返回日期

如果您需要 java.util.Date 用于其他目的,请转换您的 DateTime。

java.util.Date date = dateTime.toDate();

格式化字符串

要将您的 DateTime 表示为某种格式的新字符串,请在StackOverflow中搜索“joda 格式”。你会发现很多问题和答案。

Joda-Time 提供了许多用于生成字符串的功能,包括ISO 8601格式的默认格式化程序(见上文)、自动更改元素顺序甚至将单词翻译成各种语言的区域设置敏感格式,以及从用户计算机设置中感知的格式。如果这些都不能满足您的特殊需求,您可以在 Joda-Time 的帮助下定义自己的格式。

于 2014-01-25T04:53:55.137 回答
0
Locale.setDefault(Locale.US);

SimpleDateFormat sourceDateFormat = new SimpleDateFormat("E MMM d HH:mm:ss 'UTC'Z yyyy");
Date sourceDate = sourceDateFormat.parse("Thu Jan 1 19:30:00 UTC+0530 1970");
System.out.println(sourceDate);

SimpleDateFormat targetFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
String targetString = targetFormat.format(sourceDate);

System.out.println(targetString);

使用“ E MMM d HH:mm:ss 'UTC'Z yyyy”作为源格式。我不喜欢 Java 的 Date API,尤其是对于这种TimeZone情况。Joda-Time似乎不错。

于 2014-01-25T08:21:59.447 回答