Java DateFormat,精度为2毫秒

时间:2012-02-20 16:12:52

标签: java time date-format

我有一个问题,试图让DateFormat库给我一个字符串,日期要格式化为2毫秒而不是通常的3.我意识到这更像是厘米线,但afaik Java不支持。

以下是一些显示我遇到的问题的代码。我希望它输出到两毫秒,但它输出三。

public class MilliSeconds {
private static final String DATE_FORMAT_2MS_Digits = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'";
private static DateFormat dateFormat2MsDigits = new SimpleDateFormat(DATE_FORMAT_2MS_Digits);

public static void main( String[] args ){
    long milliseconds = 123456789123l;
    System.out.println(formatDate2MsDigits(new Date(milliseconds)));
}

public static String formatDate2MsDigits(Date date)
{
    dateFormat2MsDigits.setCalendar(Calendar.getInstance(new SimpleTimeZone(0, "GMT")));
    return dateFormat2MsDigits.format(date);
}}

输出:

  

1973-11-29T21:33:09.123Z

我可以解析生成的字符串并删除我不想要的数字,但我希望有更简洁的方法来实现这一点。有谁知道如何使这个工作,或为什么它不起作用?

3 个答案:

答案 0 :(得分:4)

对不起。根据{{​​3}}

  

除了数字组件之外,忽略数字组件的字母数   需要分隔两个相邻的字段

...所以我认为没有直接的方法可以做到。

我只会为SSS使用单独的格式并调用substring(0, 2)

答案 1 :(得分:0)

我无法推断出问题发生的原因,但在用yoda替换日期格式后,生成的时间字符串具有正确的秒数[仅为2]。

答案 2 :(得分:0)

我会包含Joda Time并使用类似的内容:

private static final String DATE_FORMAT_2MS_FMT = "yyyy-MM-dd'T'HH:mm:ss.SS'Z'";

private static final DateTimeFormatter DATE_FORMAT_2MS_DIGITS = DateTimeFormat
        .forPattern(DATE_FORMAT_2MS_FMT).withZoneUTC();

public static String formatDate2MsDigits(Date date) {
    return DATE_FORMAT_2MS_DIGITS.print(date.getTime());
}

如果您不想要额外的依赖项,我认为从.format(...)开始调整结果字符串是唯一的方法。