我是Scala的初学者,从事Spark工作。我有一个目录,其中包含7位数Julian日期的文件(09/09 / 2016-MM / DD / YYYY,它是2016274)作为他们的名字(这些每小时到达此文件夹),应该转换为正常日期,所以我可以查看特定日期,决定是否应该收集它。
我已成功从文件名中提取Julian日期,但未能将Julian日期更改为正常日期。
有人可以帮助我吗?
答案 0 :(得分:0)
所以......看看this article并决定你需要哪个版本的朱利安日。一旦你确定了Julian Date的版本,就很容易将它映射到Gregorian Calendar。
如果我们考虑最原始的朱利安日期,
现在你可以像下面那样实现它,
import java.time.{ZonedDateTime, LocalDateTime}
def julianDateToZonedDateTime(julianDate: Double): ZonedDateTime = {
val julianDayNumber = math.floor(julianDate).toLong
val julianDayFraction = julianDate - julianDayNumber
val julianDayFractionToNanoSeconds = math.floor(julianDayFraction * 24 * 60 * 60 * math.pow(10, 9)).toLong
val bcEraDateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:z:G")
val julianDateStartDate = ZonedDateTime.parse("4714-11-24 12:00:00:GMT:BC", bcEraDateFormat)
val zonedDateTime = julianDateStartDate.plusDays(julianDayNumber).plusNanos(julianDayFractionToNanoSeconds)
zonedDateTime
}
val yourJulianDate: Double = 2456293.520833
val zonedDateTime = julianDateToZonedDateTime(yourJulianDate)
// 2013-01-01T00:29:59.971206486Z[GMT]
This Wikipedia article声称Julian日期 - 2456293.520833
为2013-01-01T00:30:00[GMT]
。
现在,要么这篇文章将它近似为最接近的秒,或者由于两个日历之间的差异,我们的计算已经偏差0.0288秒。
最后,您可以决定是否添加一些舍入(如果需要)或使用确切的值。
答案 1 :(得分:0)
LocalDate.parse(
"2016274" ,
DateTimeFormatter.ofPattern( "uuuuDDD" )
)
我猜2016274
表示一年和一年。在一年中,我指的是1月1日到12月31日的1-365或1-366。在这种情况下,2016年是2016年9月30日的2016年第二百八十四天。
有些人称一年的数字为“朱利安”,尽管在我看来这是对这些惊悚小说的Julian Day的误解。
我不知道Scala的语法。但我可以向您展示使用Java平台内置的java.time类的Java语法。
DateTimeFormatter
类以格式化模式定义每年的D
。我将使用三DDD
来填充前导零,表示一位或两位数。
String input = "2016274" ;
DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuuDDD" );
LocalDate ld = LocalDate.parse( input , f );
2016年9月30日
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。