gpt4 book ai didi

Java 中的 C# DateTime.Ticks 等效项

转载 作者:IT老高 更新时间:2023-10-28 20:24:51 31 4
gpt4 key购买 nike

C# 中 DateTime.Ticks 的 Java 等价物是什么?

DateTime dt = new DateTime(2010, 9, 14, 0, 0, 0);
Console.WriteLine("Ticks: {0}", dt.Ticks);

上面提到的 Java 代码的等价物是什么?

最佳答案

好吧,java.util.Date/Calendar 的精度只有毫秒:

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

这是最接近的有效等价物。如果您需要在 .NET 刻度值和 Date/Calendar 之间进行转换,您基本上需要执行缩放(刻度到毫秒)和偏移(1st Jan 1AD 到 1st Jan 1970)。

Java 的内置日期和时间 API 相当令人不快。我个人建议您使用 Joda Time反而。如果您能说出您真正想做的事情,我们可以提供更多帮助。

编辑:好的,这里有一些示例代码:

import java.util.*;

public class Test {

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);
}
}

请注意,这会构造一个代表 2019/9/14 的 UTC 时刻的日期/日历。 .NET 表示有点模糊 - 您可以创建两个相同的 DateTime 值,除了它们的“种类”(但因此代表不同的时刻)并且它们会声称是相等的。有点乱:(

关于Java 中的 C# DateTime.Ticks 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3706306/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com