我有两个函数可以将日期字符串转换为以毫秒为单位的日期:
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。
答案 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的时区......你需要自己决定。)