我想在今天开始时以毫秒为单位获取今天的时间。我已经为它创建了一个方法,但它给我的结果错了:
private void getCurrentMillisecondsTime() {
// get calendar instance, substitute timezone for which ever you need or
// leave blank to use current
Calendar updateTime = Calendar.getInstance();
updateTime.set(Calendar.HOUR_OF_DAY, 0); // set hour
updateTime.set(Calendar.MINUTE, 0); // set minute
updateTime.set(Calendar.SECOND, 0); // set seconds
long time = updateTime.getTimeInMillis(); // get milliseconds
System.out.println(updateTime.getTime());
System.out.println(time);
}
以上代码的输出为:
I/System.out(30191): Mon Jun 30 00:00:00 GMT+06:00 2014
I/System.out(30191): 1404064800894
但我希望它是:
1404066600000
我认为时区问题我不知道如何解决。
答案 0 :(得分:3)
今天的开始显然取决于时区。根据您对1404066600000
的期望,您正在寻找距UTC的5.5小时偏移量,这可能是印度的时区。
所以你需要这样的东西:
Calendar updateTime = Calendar.getInstance(TimeZone.getTimeZone("Asia/Calcutta"));
updateTime.set(Calendar.HOUR_OF_DAY, 0); // set hour
updateTime.set(Calendar.MINUTE, 0); // set minute
updateTime.set(Calendar.SECOND, 0); // set seconds
updateTime.set(Calendar.MILLISECOND, 0); // set milliseconds
long time = updateTime.getTimeInMillis(); // get milliseconds
System.out.println(updateTime.getTime());
System.out.println(time);
输出(我的时区是BST =英国夏令时):
Sun Jun 29 19:30:00 BST 2014
1404066600000
答案 1 :(得分:0)
我编写了这个方法,可以在不创建昂贵的日历对象的情况下完成您所需的工作
public static long getStartOfDay(long t) {
TimeZone tz = TimeZone.getDefault();
t +=tz.getOffset(t);
t -= (t % 86400000);
t -= tz.getOffset(t);
return t;
}
要获得今天开始的毫秒时间,你可以这样做
getStartOfDay(System.currentTimeMillis());