SimpleDateFormat解析函数改变格式

时间:2012-07-22 12:03:52

标签: java parsing simpledateformat

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

[2012年7月20日5:11:36,670 UTC时间,2012年7月20日5:11:36,683 UTC PM]

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

我是否需要在SimpleDateFormat中设置LOCALE以使其输出不同?

2 个答案:

答案 0 :(得分:2)

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

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

您的代码的作用是:

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

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

答案 1 :(得分:1)

你有两个小问题:

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

    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