我是Scala上的Spark初學者。我有一個帶有7位儒略日期(09/30/2016-MM/DD/YYYY,它是2016274)的文件目錄作爲他們的名字(每小時到達這個文件夾),它應該被轉換爲正常日期我可以檢查一個特定的日期,決定是否應該收集它。獲取當前Julian日期並將其更改爲Scala中的正常日期
我已成功從文件的名稱中提取Julian日期,但未能將Julian日期更改爲正常日期。
有人可以幫我在這裏嗎?
我是Scala上的Spark初學者。我有一個帶有7位儒略日期(09/30/2016-MM/DD/YYYY,它是2016274)的文件目錄作爲他們的名字(每小時到達這個文件夾),它應該被轉換爲正常日期我可以檢查一個特定的日期,決定是否應該收集它。獲取當前Julian日期並將其更改爲Scala中的正常日期
我已成功從文件的名稱中提取Julian日期,但未能將Julian日期更改爲正常日期。
有人可以幫我在這裏嗎?
朱利安日期成爲一個複雜的概念,當你考慮與之相關的歷史和改革。這就是使用Java提供的Julian日期實現的問題,因爲我們不知道它實現了哪種變體,我們可能需要Julian Date的其他定義。
所以...看看this article並決定您需要哪個版本的Julian-Day。一旦你決定了你的朱利安日期版本,它很容易繪製公曆日曆。
如果我們考慮到最原始的儒略曆,
現在你可以實現像下面,
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索賠儒略日 - 2456293.520833
是2013-01-01T00:30:00[GMT]
。
現在,無論這篇文章是否近似於最接近的秒數,還是由於兩個日曆之間的差異,我們的計算已經偏離了0.0288秒。
最後,您可以決定是否添加一些舍入(如果需要)或使用確切的值。
LocalDate.parse(
"2016274" ,
DateTimeFormatter.ofPattern("uuuuDDD")
)
我猜測2016274
意味着一年中某一天的一年。我的意思是指1月1日到12月31日的1-365或1-366。在這種情況下,2016年的第二百七十四天即2016年9月30日。
一些人們稱之爲「朱連」,儘管這在我看來是誤解了人們的想象「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。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
你可以檢查它,它是基於Java,但你仍然可以在Scala中包含此代碼http://stackoverflow.com/questions/3017954/convert-a-julian-date-to-regular-calendar-date – Shankar
@Siva「Julian date」的意思是什麼?意義超載,不同人使用不同。請編輯您的問題以提供示例字符串的精確副本。 –
@Basil,我的意思是一個7位數的日期。然而,我編輯了我的問題。 – Siva