我想确认一下我的时间戳。我附上了代码片段:
import org.apache.flink.streaming.api.windowing.time.Time;
Date date = new Date(Time.seconds(30).toMilliseconds());
DateFormat formatter = new SimpleDateFormat("HH:mm:ss:SSS");
String dateFormatted = formatter.format(date);
logger.debug(Time.seconds(30).toMilliseconds() + " " + dateFormatted);
结果是:
30000 01:00:30:000
编辑:
[user@hdp ~]$ date
Thu Jun 29 11:39:27 CEST 2017
我错过了什么?谢谢!
2条答案
按热度按时间8dtrkrch1#
这个
Date
你创造的价值January 1, 1970, 00:00:30 GMT
. 正如其他人指出的,你的时区与格林威治标准时间相差一小时。。。kwvwclae2#
我不知道是什么
Time
在你的代码里,但我想Time.seconds(30).toMilliseconds()
将返回30000(30秒内的毫秒数)。你在用课堂
java.util.Date
在某种程度上,它不是专为。班级Date
实际上是一个时间戳,它包含自固定参考点(01-01-1970,00:00:00 gmt)起的毫秒数。在下面的代码行中,您使用的是类
Date
要仅存储一个时间(小时、分钟、秒和毫秒数):班级
Date
不是为这个而设计的,也不适合一次性储存。在上面的一行中发生的是Date
指1970年1月1日00:00:30 gmt(gmt时区1970年1月1日午夜后30秒)时刻的对象。然后使用
SimpleDateFormat
. 你自己的时区很可能比格林尼治时间早1小时,而且SimpleDateFormat
将使用您的本地时区设置日期格式。如果您需要存储一天中的某个时间(小时、分钟、秒和毫秒),那么使用类
java.time.LocalTime
而不是上课java.util.Date
. 如果需要存储持续时间,请使用类java.time.Duration
:你应该用新的
java.time
反正api不是旧的java.util.Date
上课,因为好多了。如果您使用的是较旧的java版本(早于java8),那么joda time是一个很好的选择。