如何获得从纪元到今天开始的毫秒数?

时间:2014-06-30 15:28:15

标签: java android datetime

我想在今天开始时以毫秒为单位获取今天的时间。我已经为它创建了一个方法,但它给我的结果错了:

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

我认为时区问题我不知道如何解决。

2 个答案:

答案 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());