从长时间戳中获取纯时间元素

时间:2016-03-23 23:16:03

标签: java timestamp

在我的java(实际上是Android,但这里不相关)项目中,用户可以输入某些活动的开始和结束时间,系统会自动计算持续时间。按下按钮,我使用System.currentTimeMillis()获取当前时间戳。

由于超出此问题范围的原因,我需要丢弃时间戳的日期部分,并仅存储时间一。我想,很容易,除以一天中的毫秒数并取余数:

long currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimeStamp % (1000 * 60 * 60 * 24);

这个几乎有效 - 除了它产生一个小时的时间戳。这是一个例子:

DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US);
long currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimestamp % (1000 * 60 * 60 * 24);
System.out.println("Full value: " + timeFormat.format(currentTimestamp));
System.out.println("Time only: " + timeFormat.format(timeOnly));

此代码打印:

Full value: 10:53 PM
Time only: 11:53 PM


Full value: 11:19 PM
Time only: 12:19 AM

虽然我可以从时间戳中减去一小时,但我想真正了解发生这种情况的原因。

1 个答案:

答案 0 :(得分:0)

尝试:

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(new Date(System.currentTimeMillis()));
    calendar.set(Calendar.MONTH, 0);
    calendar.set(Calendar.YEAR, 0);
    calendar.set(Calendar.DAY_OF_MONTH, 0);

    System.out.println("Full value: " + timeFormat.format(currentTimestamp));
    System.out.println("Time only: " + timeFormat.format(calendar.getTimeInMillis()));

Calendar实例将使用您当前的Timezone,所有设置者都会考虑更改时区。因此,它应该工作。

注意

问题仍然存在,为什么要这样做。您是否只想将时间信息存储在数据库中,而不是存储“完整日期”?如果你想这样做,那么当前的语言环境时间映射到UTC时间(而不是使用currentTimeMillis())。