有没有办法以秒为单位获取当天的当前时间?注意我问的是当天的时间,而不是UTC时间。
我想要的是范围 0 - 86,400 (12:00 AM - 11:59 PM)之间的值(以秒为单位)。我正在开发一个每天都有效的应用程序,当这一天结束时,时间(以秒为单位)应该再次重新开始0
。
所以我们说它是10:00AM
。我应该 36,000 秒,如果我的时间是5:00PM
,我应该 61,200 秒。
currentTime()
函数自行计算出来。
答案 0 :(得分:4)
使用Java 8,您可以创建Duration
实例
例如:
LocalDateTime date = LocalDateTime.now();
long seconds = Duration.between(date.withSecond(0).withMinute(0).withHour(0), date).getSeconds();
或者更简单地说,您可以将LocalDateTime
转换为LocalTime
个实例,然后应用toSecondOfDay()
方法:
LocalDateTime date = LocalDateTime.now();
int seconds = date.toLocalTime().toSecondOfDay();
来自java.time.LocalTime
javadoc:
public int toSecondOfDay()
将时间提取为一天中的秒数,从0到24 * 60 * 60 - 1。
答案 1 :(得分:3)
使用java.time.LocalTime
和java.time.temporal.ChronoField
:
// 10:00 AM
LocalTime d = LocalTime.of(10, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 36000
// 05:00 PM
d = LocalTime.of(17, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 61200
// 23:59:59
d = LocalTime.of(23, 59, 59);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 86399
// midnight
d = LocalTime.of(0, 0);
System.out.println(d.get(ChronoField.SECOND_OF_DAY)); // 0
打印:
36000
61200个
86399个
0
备注:强>
这只是一个例子。如果您想从当前时间获取值,只需使用LocalTime.now()
(或@Ole V.V.'s answer所指向的LocalTime.now(ZoneId.of("timezone-name"))
)。
作为timezone-name
,请始终使用IANA timezones names(始终采用Continent/City
格式,例如America/Sao_Paulo
或Europe/Berlin
)。
避免使用3个字母的缩写(例如CST
或PST
),因为它们是ambiguous and not standard。您可以致电ZoneId.getAvailableZoneIds()
获取可用时区列表(并选择最适合您系统的时区)。
d.toSecondOfDay()
(相当于get(ChronoField)
内部呼叫toSecondOfDay
)。答案 2 :(得分:2)
我建议:
int secondsOfDay = LocalTime.now(ZoneId.of("Europe/Rome")).toSecondOfDay();
注意事项:
ZoneId.systemDefault()
,或者甚至更好的是,如果在您的情况下提供命名区域(例如ZoneId.of("Europe/Rome")
)是有意义的。LocalDate.now(yourTimeZone).atStartOfDay(yourTimeZone)
的计算。答案 3 :(得分:0)
您可以将秒分钟小时字段转换为秒并添加它们
Calendar c = new GregorianCalendar();
int totalSecs = c.get(Calendar.SECOND) + 60 * c.get(Calendar.MINUTE) + 3600 * c.get(Calendar.HOUR_OF_DAY);
答案 4 :(得分:0)
您可以使用SimpleDateFormat提取小时,分钟和秒。它可在Java 7,Java 6和Java 8上运行,并适应您的本地时间和时区:
String timeNowHMS[] = new SimpleDateFormat("HH:mm:ss", Locale.ENGLISH)
.format(System.currentTimeMillis())
.split(":");
int secondsPassedInTheDay =
Integer.parseInt(timeNowHMS[0]) * 60 * 60
+ Integer.parseInt(timeNowHMS[1]) * 60
+ Integer.parseInt(timeNowHMS[2]);