gpt4 book ai didi

java - 如何像在 Ruby 中那样用 Java 计算毫秒?

转载 作者:行者123 更新时间:2023-12-01 07:05:41 25 4
gpt4 key购买 nike

我可以使用以下 Ruby 代码片段计算以毫秒为单位的时间:

$ irb
> require 'date'
=> true
> Date.new(2014,9,5).to_time
=> 2014-09-05 00:00:00 +0200
> Date.new(2014,9,5).to_time.to_i * 1000
=> 1409868000000

1409868000000 是所需的结果。
我怎样才能用Java得到相同的结果?我将时区设置为 CEST因为 Ruby 似乎就是用它来工作的。所以我尝试了这个:

GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("CEST"));
calendar.set(2014, 9, 5);
System.out.println("" + calendar.getTimeInMillis());
// Returns: 1412498241422

最佳答案

您当前的代码存在三个问题:

  • “CEST”不是 Java 识别的时区。尝试使用 Europe/Paris 作为欧洲时区
  • java.util.Calendar 使用从 0 开始的月份(是的,这很糟糕)
  • 您尚未清除日历的时间部分,因此它会为您提供当天的当前时间

这有效:

import java.util.*;

public class Test {
public static void main(String[] args) throws Exception {
TimeZone zone = TimeZone.getTimeZone("Europe/Paris");
Calendar calendar = new GregorianCalendar(zone);
// Month 8 = September in 0-based month numbering
calendar.set(2014, 8, 5, 0, 0, 0);
calendar.set(Calendar.MILLISECOND, 0);
System.out.println(calendar.getTimeInMillis());
}
}

如果您提前知道月份,则可以使用常量:

calendar.set(2014, Calendar.SEPTEMBER, 5, 0, 0, 0);

如果您可以改用Joda Time或 Java 8 中的 java.time,但是,这些 API 更加简洁。

例如,在乔达时间:

import org.joda.time.*;

class Test {
public static void main(String[] args) {
DateTimeZone zone = DateTimeZone.forID("Europe/Paris");
// Look ma, a sensible month numbering system!
LocalDate date = new LocalDate(2014, 9, 5);
DateTime zoned = date.toDateTimeAtStartOfDay(zone);
System.out.println(zoned.getMillis());
}
}

关于java - 如何像在 Ruby 中那样用 Java 计算毫秒?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25443016/

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