0

我有一个包含多个日期的字符串:

[2012 年 7 月 20 日下午 5:11:36,670 UTC,2012 年 7 月 20 日下午 5:11:36,683 UTC]

ParsePosition parsePos = new ParsePosition(1);
SimpleDateFormat format2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss,SSS z a");
System.out.println(format2.parse(entry.getValue().toString(), parsePos)) ;

输出 :Fri Jul 20 06:11:36 BST 2012

我需要输出为20-Jul-2012 5:11:36,670 UTC PM.

我是否需要在 LOCALE 中设置SimpleDateFormat没有不同的输出?

4

2 回答 2

2

您需要设置时区,但更重要的是,您只需要实际使用格式来格式化日期:

Date date = format2.parse(...);
String formattedDate = format2.format(date);
System.out.println(formattedDate);

您的代码的作用是:

Date date = format2.parse(...);
System.out.println(date.toString());

我真的不明白将字符串解析为日期,然后使用完全相同的格式显示日期的意义(除了验证字符串确实是有效日期,但你可以简单地重用原始字符串)。

于 2012-07-22T12:19:04.740 回答
1

你有两个小问题:

  1. 使用hh一小时,而不是HHH是“一天中的小时 (0-23),因此无法与aAM/PM 标记一起正常工作。您的两个示例日期字符串将解析为 AM,而不是 PM。
  2. 您正在使用 SimpleDateFormat 解析字符串,但不对其进行格式化。使用format2.format(format2.parse(entry.getValue().toString()).

这是一个完整的例子:

SimpleDateFormat format = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss,SSS z a");
String input = "20-Jul-2012 5:11:36,670 UTC PM";
Date date = format.parse(input);
String output = format.format(date);
System.out.println(output);

结果:

20-Jul-2012 05:11:36,670 UTC PM
于 2012-07-22T12:23:56.070 回答