【问题标题】:How to convert a date to Julian Format in Java?如何在 Java 中将日期转换为 Julian 格式?
【发布时间】:2015-01-29 11:24:06
【问题描述】:

我有一个以数字格式到达我的日期值流,我认为它是儒略格式(不确定)。我需要将这些日期与我自己的日期进行比较,因此我需要将“我的”日期转换为该数字格式。 对于性能问题,我不能反其道而行之。

示例。 我的日期是“经典”格式:

"Wed Jan 21 10:21:57 CET 2015"

我需要将它转换成这种数字格式(是 Julian 吗?):

"1421832117"

怎么样? 注意:在朱利安日期中,我还需要时间信息,而不仅仅是日期!

非常感谢。

【问题讨论】:

  • 也许this 有帮助。
  • 它看起来不像儒略日期,我认为它是自 Unix 纪元以来的秒数。
  • 确实——一旦你有一个Date 对象就很容易得到。 “我的”日期从何而来?它真的是一个字符串,还是只是在 Date 上调用 toString() 的结果?
  • 如果您需要进一步的帮助或 sn-p,您可以使用 Joda 时间库,您可以在这里询问

标签: java date jodatime julian-date


【解决方案1】:

您可以使用您提供的日期格式传递 Arg(输入),下面的方法将以 Millis(您想要的格式)解析它

private void parseDateTime(String input){
    DateTimeZone CET = DateTimeZone.forID("CET");
    DateTimeFormatter dtf = DateTimeFormat.forPattern("EEE MMM dd HH:mm:ss 'CET' yyyy").withZone(CET);
    DateTime parsed = dtf.parseDateTime(input);
    Log.d("Millis for classic","" + parsed.getMillis());
}

输出:01-28 20:40:56.787:经典的 D/Millis(22559):1421832117000

【讨论】:

    【解决方案2】:

    自 1970 年以来的秒数

    您显然将自 1970 UTC 第一时刻以来的整秒计数误认为Julian day number。虽然两者都很重要,但它们完全是野兽。

    儒略日数是自公元前 4713 年 1 月 1 日,proleptic Julian calendar(公元前 4714 年 11 月 24 日,proleptic Gregorian calendar)以来的整数或小数天数。下面看到的日期的儒略日数,2015-01-212457043。与问题中看到的1421832117 输入非常不同。

    java.time

    使用 Java 8 及更高版本中内置的 java.time 框架,我们可以轻松地将您的秒数转换为日期时间对象。请参阅Oracle Tutorial 了解 java.time。大部分 java.time 功能已在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在 ThreeTenABP 中进一步适应 Android。

    Instant 是 UTC 时间线上的时刻,分辨率高达纳秒。

    Instant now = Instant.now();
    

    我们可以轻松地将convert your count of seconds 从 1970 UTC 开始转换为 Instant 对象。

    long seconds = 1421832117L; // Count of whole seconds since start of 1970 UTC.
    Instant instant = Instant.ofEpochSecond ( seconds );
    

    您可能希望通过某个时区的wall-clock time 查看此内容。避免使用 3-4 个字母的缩写,例如 CET,因为这些不是真正的时区,没有标准化,甚至不是唯一的(!)。 proper time zone name 的格式为 continent/region

    ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
    ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
    

    转储到控制台。

    System.out.println ( "seconds:" + seconds + " | instant: " + instant + " | zdt: " + zdt );
    

    秒:1421832117 |瞬间:2015-01-21T09:21:57Z | zdt: 2015-01-21T10:21:57+01:00[欧洲/巴黎]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 2019-07-23
      • 2013-05-11
      相关资源
      最近更新 更多