在我的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
虽然我可以从时间戳中减去一小时,但我想真正了解发生这种情况的原因。
答案 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())。