Geo*_*lou 247 java datetime milliseconds java-8 java-time
我想知道如果有一种方法,因为1970年1月1日(时期),以获得当前毫秒使用新的LocalDate,LocalTime或LocalDateTimeJava的8类.
已知的方法如下:
long currentMilliseconds = new Date().getTime();
Run Code Online (Sandbox Code Playgroud)
要么
long currentMilliseconds = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
Stu*_*rks 293
我不完全确定你的意思是"当前毫秒",但我认为这是自"世纪"以来的毫秒数,即1970年1月1日午夜.
如果你想现在找到自纪元以来的毫秒数,那么System.currentTimeMillis()就像Anubian Noob所指出的那样.如果是这样,没有理由使用任何新的java.time API来执行此操作.
但是,也许您已经LocalDateTime从某个地方拥有了一个或类似的对象,并且您希望将其转换为自纪元以来的毫秒数.直接这样做是不可能的,因为LocalDateTime对象族不知道他们所在的时区.因此需要提供时区信息来查找相对于时间的时间,以UTC为单位.
假设你有LocalDateTime这样的:
LocalDateTime ldt = LocalDateTime.of(2014, 5, 29, 18, 41, 16);
Run Code Online (Sandbox Code Playgroud)
你需要应用时区信息,给出一个ZonedDateTime.我和洛杉矶在同一时区,所以我会这样做:
ZonedDateTime zdt = ldt.atZone(ZoneId.of("America/Los_Angeles"));
Run Code Online (Sandbox Code Playgroud)
当然,这会对时区做出假设.并且存在可能发生的边缘情况,例如,如果本地时间恰好命名接近夏令时(夏令时)转换的时间.让我们把这些放在一边,但你应该知道存在这些情况.
无论如何,如果你能得到一个有效的ZonedDateTime,你可以将它转换为自纪元以来的毫秒数,如下所示:
long millis = zdt.toInstant().toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
bri*_*ian 72
我这样做我没有指定时区是,
System.out.println("ldt " + LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().toEpochMilli());
System.out.println("ctm " + System.currentTimeMillis());
Run Code Online (Sandbox Code Playgroud)
给
ldt 1424812121078
ctm 1424812121281
Run Code Online (Sandbox Code Playgroud)
如果您不喜欢System.current ....,请使用 Instant.now().toEpochMilli()
Dan*_*ani 18
要避免使用ZoneId,您可以:
LocalDateTime date = LocalDateTime.of(1970, 1, 1, 0, 0);
System.out.println("Initial Epoch (TimeInMillis): " + date.toInstant(ZoneOffset.ofTotalSeconds(0)).toEpochMilli());
Run Code Online (Sandbox Code Playgroud)
获得0作为价值,这是正确的!
Mar*_*eng 13
从Java 8开始,您就可以使用了
final long currentTimeJava8 = Instant.now().toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
这给你的结果和
final long currentTimeJava1 = System.currentTimeMillis();
Run Code Online (Sandbox Code Playgroud)
小智 9
您还可以使用java.sql.Timestamp来获取毫秒数。
LocalDateTime now = LocalDateTime.now();
long milliSeconds = Timestamp.valueOf(now).getTime();
System.out.println("MilliSeconds: "+milliSeconds);
Run Code Online (Sandbox Code Playgroud)
为什么没有人提到这个方法LocalDateTime.toEpochSecond():
LocalDateTime localDateTime = ... // whatever e.g. LocalDateTime.now()
long time2epoch = localDateTime.toEpochSecond(ZoneOffset.UTC);
Run Code Online (Sandbox Code Playgroud)
这似乎比上面许多建议的答案要短得多......
你可以试试这个:
long diff = LocalDateTime.now().atZone(ZoneOffset.UTC).toInstant().toEpochMilli();
Run Code Online (Sandbox Code Playgroud)
如果是的话LocalDate,可以使用该toEpochDay()方法。它返回自 1970 年 1 月 1 日以来的天数。然后这个数字可以很容易地转换为毫秒:
long dateInMillis = TimeUnit.DAYS.toMillis(myLocalDate.toEpochDays());
Run Code Online (Sandbox Code Playgroud)
可以在此处找到文档。
如果是的话LocalDateTime,可以使用该toEpochSecond()方法。它返回自 1970 年 1 月 1 日以来的秒数。该数字也可以转换为毫秒:
long dateTimeInMillis = TimeUnit.SECONDS.toMillis(myLocalDateTime.toEpochSeconds());
Run Code Online (Sandbox Code Playgroud)
相关文档在这里。
小智 5
对于 LocalDateTime 我这样做:
LocalDateTime.of(2021,3,18,7,17,24,341000000)
.toInstant(OffsetDateTime.now().getOffset())
.toEpochMilli()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
287999 次 |
| 最近记录: |