在我的Java项目中,我在long
中使用了日期,例如12136219
,并创建了Date
对象,如下所示:
long time = 12136219;
Date date = new Date(time);
,它将日期表示为Thu Jan 01 04:22:16 CET 1970
。如何将日期(长时间表示)舍入到分钟?
例如,如果秒数为Thu Jan 01 04:22:00 CET 1970
,则我希望达到<30
;如果秒为Thu Jan 01 04:23:00 CET 1970
,我希望达到>=30
,但我希望围绕此long time = 12136219
表示。有什么想法吗?
答案 0 :(得分:3)
当您从Date
创建long
时,long表示自1970年1月1日以来的毫秒数。一分钟内有60 * 1000毫秒。这应该足以形成您需要的舍入算法。
答案 1 :(得分:3)
从那时起 “自标准基准时间以来称为”时代“的毫秒,即1970年1月1日00:00:00 GMT” 您可以像这样计算秒数:
secondsInMillis = time % (60 * 1000) //get remainder (modulo): seconds * milliseconds
if (secondsInMillis < 30000) {
time -= secondsInMillis; //round down
} else {
time += (60000 - secondsInMillis); // round up
}
答案 2 :(得分:3)
不要重新发明轮子。使用java.time.Instant
代表即时时间:
Instant i = Instant.ofEpochMilli(time);
i = i.plusSeconds(30).truncatedTo(ChronoUnit.MINUTES);
Instant
不提供舍入,只提供截断。但是,添加30秒然后截断可以为您提供所需的内容。如果你需要几毫秒的时间,那很简单:
time = i.toEpochMilli();
System.out.println(time);
根据您的问题编号打印
12120000
(这相当于CET中1970-01-01T03:22:00Z,或1970-01-01T04:22 + 01:00 [欧洲/巴黎]的瞬间,或者{{的预期四舍五入1}}。)
PS我非常相信像Time4J这样的库会提供舍入,所以你不需要添加和截断的技巧。很遗憾,我没有经验向您提供详细信息。
答案 3 :(得分:0)
只需使用日历
重置秒和毫秒Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.MINUTES, calendar.get(Calendar.SECOND) >= 30 ? 1 : 0)
currentDate = cal.getTimeInMillis();
答案 4 :(得分:0)
您应该在Date对象上执行此操作。由于各种困难,包括一个月的长度(28,29,30或31),没有简单的方法可以在时间内计算它。