日期(以毫秒为单位)与其日历表示之间的差异

时间:2014-01-02 11:32:34

标签: java calendar timestamp

我有两个函数可以将日期字符串转换为以毫秒为单位的日期:

public static long convertYYYYMMDDtoLong(String date) throws ParseException {
    SimpleDateFormat f = new SimpleDateFormat("yyyy-mm-dd");
    Date d = f.parse(date);
    long milliseconds = d.getTime();
    return milliseconds;
}

如果我运行此功能,我会得到以下结果:

long timeStamp = convertYYYYMMDDtoLong("2014-02-17");
System.out.println(timeStamp);

打印:

1389909720000

现在,如果我运行以下代码:

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timeStamp);
System.out.println(cal.getTime());

打印出来:

Fri Jan 17 00:02:00 IST 2014

为什么我的约会时间会移动一个月?有什么问题?

P.S:我的问题是,我需要将日期(表示为long)映射到另一个仅接受Calendar格式的第三方API。

1 个答案:

答案 0 :(得分:5)

你正在使用mm,这是几分钟而不是几个月。您希望yyyy-MM-dd作为格式字符串。

目前尚不清楚为什么你没有直接从你的方法返回Calendar,请注意:

private static final TimeZone UTC = TimeZone.getTimeZone("Etc/UTC")

public static Calendar convertYYYYMMDDtoCalendar(String text) throws ParseException {        
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
    format.setTimeZone(UTC);
    Calendar calendar = new GregorianCalendar(UTC);
    calendar.setDate(format.parse(text));
    return calendar;
}

(假设你想要一个UTC的时区......你需要自己决定。)