我遇到了一种情况,我想将儒略日期转换为一个java.time.Instant
(如果有意义的话)或一些可以更容易理解的Java时间。我对儒略日期的理解来自阅读Wikipedia页面。有很多不同的变体,而我尝试阅读的日期使用的变体不同于所有这些变体。
例如,假设纪元是1750年《日历(新样式)法》的开始95906.27600694445
,在这种情况下,我认为儒略日期是
CE 2015年4月15日06:37:26.9 UT ,我如何从中获取时间这个?稍后需要调整时区。
我注意到有一个名为的类JulianFields
,但我不知道在哪里/如何使用它。另外,我在软件包中看到的大多数方法都使用int
或long
,实际上并没有使用for
double
。
因此,有没有一种简单的方法可以将使用不同时期的儒略日期转换为Java 8 Instant
(如果我的想法是错误的,则可以转换为其他时间)。
这是使用新的Java 8类的解决方案:
public class JulianDay {
private static final double NANOS_PER_DAY = 24.0 * 60.0 * 60.0 * 1000000000.0;
// Calculate Instants for some epochs as defined in Wikipedia.
public static final Instant REDUCED_JD =
ZonedDateTime.of(1858, 11, 16, 12, 0, 0, 0, ZoneOffset.UTC).toInstant();
public static final Instant MODIFIED_JD =
ZonedDateTime.of(1858, 11, 17, 0, 0, 0, 0, ZoneOffset.UTC).toInstant();
public static final Instant JULIAN_DATE =
REDUCED_JD.minus(2400000, ChronoUnit.DAYS);
private final Instant epoch;
public JulianDay(Instant epoch) {
super();
this.epoch = epoch;
}
public Instant toInstant(double day) {
long l = (long) day;
return epoch
.plus(l, ChronoUnit.DAYS)
.plusNanos(Math.round((day - l) * NANOS_PER_DAY));
}
public static void main(String[] args) {
// Use the example values from Wikipedia for 2015-09-07 13:21 UTC.
System.out.println(new JulianDay(REDUCED_JD).toInstant(57273.05625));
// Output: 2015-09-07T13:21:00.000000126Z
System.out.println(new JulianDay(MODIFIED_JD).toInstant(57272.55625));
// Output: 2015-09-07T13:21:00.000000126Z
System.out.println(new JulianDay(JULIAN_DATE).toInstant(2457273.05625));
// Output: 2015-09-07T13:20:59.999991953Z
}
}
关于JulianFields
询问的对象,可以定义一个自定义格式器,如下所示:
DateTimeFormatter formatter = new DateTimeFormatterBuilder()
.appendValue(JulianFields.MODIFIED_JULIAN_DAY)
.toFormatter().withZone(ZoneOffset.UTC);
不幸的是,它不支持几天的时间:
System.out.println(formatter.format(Instant.now())); // Output: 57249
System.out.println(LocalDate.from(formatter.parse("57249"))); // Output: 2015-08-15
问题内容: 我进行了广泛的搜索,但是似乎找不到将julian转换为的方法。 这是我的朱利安格式: 朱利安格式由年份,前两位数字和一年中的日期,最后三位数字组成。 例如,是。用表示年份,用表示年份 的第76天。 我已经尝试过了,但是没有用: 问题答案: 您可以使用选择日期的每个部分 +编辑:我误会了一些东西。这是我的更正: +++
问题内容: 我在mySQL 5.1中有一个数据类型的日期列。如何将其转换为DATE? 这是我到目前为止所拥有的- 得到这个 错误-#1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册以获取正确的语法,以在’FROM 7 FOR 4附近使用) 请帮忙。 问题答案: 您可以使用MySQL的功能 尽管我怀疑您使用Unix时间戳会更轻松
周日->明谷-0 周一->赛宁-1 周二->Selasa-2 帮我谢谢
问题内容: 我在python中有一个字符串。我需要将其转换为date对象,然后获取 year 以及 Julian day 的整数值。可能吗? 问题答案: 首先,您可以将其转换为这样的对象: 然后,您可以使用上的方法来获取所需的内容……除了没有直接所需的功能之外,因此您需要转换为时间元组 术语“朱利安日”具有几个不同的含义。如果要查找,则必须间接执行此操作,例如,以下一项。 如果您正在寻找不同的含义
问题内容: 我的json 响应 包含一个 CreatedOn 日期: 我需要将 CreatedOn 转换为简单的日期格式,并 计算从CreatedOn日期到当前日期的差异天数。 当我调试下面的代码字符串 CreatedOn时 显示一个空值。怎么会? 问题答案: 要么 考虑使用JSON方法而不是包含。JSON具有“ has()”,用于验证密钥是否存在。 您还应该确保首先尝试{}捕获{}字符串,以确保
问题内容: 我需要将1/9/2011的varchar值转换为mySQL中的日期,并且只需要月份和年份。这样我就可以使用该功能(因此,我需要将以上内容转换为201101)。 我已经尝试过使用函数的各种方式: 但是我得到了奇怪的结果…(例如:2009-01-00) 我做错了什么? 问题答案: 要么 很难从你的例子中看出