如何用java编写c中的datetime.utcnow.ticks

x4shl7ld  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(427)

我正在尝试将下面两行代码从c#重写为java。

long ticks1970Onwards = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc).Ticks;
 long newTs =    (DateTime.UtcNow.Ticks - ticks1970Onwards)/10000;

我尝试了多种方法,但没有找到正确的解决方法。

ZonedDateTime dt1 = LocalDateTime.now().atZone(ZoneId.of("UTC"));
        ZonedDateTime dt2 = LocalDateTime.of(1901, 1, 1, 0, 0).atZone(ZoneId.of("UTC"));
        Duration duration2 = Duration.between(dt2, dt1);
        System.out.printf("Duration = %s milliseconds.%n", duration2.getSeconds()*1000);
hjqgdpho

hjqgdpho1#

Calendar calendar = Calendar.getInstance(); 
calendar.set(Calendar.MILLISECOND, 0); // Clear the millis part. Silly API. 
calendar.set(2010, 8, 14, 0, 0, 0); // Note that months are 0-based 
Date date = calendar.getTime(); 
long millis = date.getTime(); // Millis since Unix epoch

例子
导入java.util.*;
公开课考试{

private static final long TICKS_AT_EPOCH = 621355968000000000L; 
private static final long TICKS_PER_MILLISECOND = 10000; 

public static void main(String[] args) { 
 long ticks = 634200192000000000L; 

 Date date = new Date((ticks - TICKS_AT_EPOCH)/TICKS_PER_MILLISECOND); 
 System.out.println(date); 

 TimeZone utc = TimeZone.getTimeZone("UTC"); 
 Calendar calendar = Calendar.getInstance(utc); 
 calendar.setTime(date); 
 System.out.println(calendar); 
}

}
例子
导入java.util.calendar;导入java.util.date;
公共类datehelper{

private static final long TICKS_AT_EPOCH = 621355968000000000L; 
 private static final long TICKS_PER_MILLISECOND = 10000; 

 public static long getUTCTicks(Date date){ 

  Calendar calendar = Calendar.getInstance(); 
  calendar.setTime(date); 

  return (calendar.getTimeInMillis() * TICKS_PER_MILLISECOND) + TICKS_AT_EPOCH; 

 } 

 public static Date getDate(long UTCTicks){ 

  return new Date((UTCTicks - TICKS_AT_EPOCH)/TICKS_PER_MILLISECOND); 

 }
tv6aics1

tv6aics12#

瞬间#toepochmilli

使用它来转换 Instant.now() 以毫秒为单位 1970-01-01T00:00:00Z 哪里 Z 代表 Zulu 时间和代表 UTC .

import java.time.Instant;

public class Main {
    public static void main(String[] args) {
        Instant now = Instant.now();
        System.out.println(now.toEpochMilli());
    }
}

您可以将此结果与c#游戏场上的c#代码的结果进行比较。
注意:避免用三个字母的缩写指定时区。时区应以区域/城市的格式指定名称,例如。 ZoneId.of("Europe/London") . 在这个大会上 ZoneId 为了 UTC 可以指定为 ZoneId.of("Etc/UTC") . 按时间规定的时区 UTC[+/-]Offset 可以指定为 Etc/GMT[+/-]Offset 例如 ZoneId.of("Etc/GMT+1") , ZoneId.of("Etc/GMT+1") 等。
也有一些例外情况,例如指定 Turkey ,我们使用

ZoneId.of("Turkey")

下面的代码将为您提供所有可用的 ZoneId 学生:

// Get the set of all time zone IDs.
Set<String> allZones = ZoneId.getAvailableZoneIds();

相关问题