【发布时间】:2012-06-28 06:31:20
【问题描述】:
我需要存储不含时区信息的年月日信息。
这是一些代码:
private static void test() {
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("US/Pacific"));
System.out.println("Before: " + cal.get(DAY_OF_MONTH));
//
long datestamp = toDatestamp(cal.getTimeInMillis());
long timestamp = toTimestamp(datestamp);
cal.setTimeInMillis(timestamp);
System.out.println("After: " + cal.get(DAY_OF_MONTH));
}
private static long toTimestamp(long datestamp) {
return TimeUnit.DAYS.toMillis(datestamp);
// return datestamp * DS_MULT;
}
private static long toDatestamp(long timestamp) {
return TimeUnit.MILLISECONDS.toDays(timestamp);
// return timestamp / DS_MULT;
}
// hours * minutes * seconds * milliseconds
private static long DS_MULT = 24 * 60 * 60 * 1000;
有两种方法,其中一种被注释掉了。但结果是一样的:
Before: 26
After: 25
为什么转换后日期会改变?我错过了什么明显的东西吗?
【问题讨论】:
-
DAY_OF_MONTH 是什么?它在哪里定义?
-
那是
import static java.util.Calendar.DAY_OF_MONTH; -
您能否更清楚地描述您的问题是什么,以及您想用您的代码实现什么?