我有一个问题,试图让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
我可以解析生成的字符串并删除我不想要的数字,但我希望有更简洁的方法来实现这一点。有谁知道如何使这个工作,或为什么它不起作用?
答案 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(...)
开始调整结果字符串是唯一的方法。