亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

公歷日期至今

公歷日期至今

收到一只叮咚 2022-05-25 16:35:33
這應該很簡單customerSearch.get("DateOfBirth")其中customerSearch 是a HashMap<String, Object>,它是公歷日期。但我需要一個普通的Date對象。我試過Date dateOfBirth = new Date(         ((GregorianCalendar) customerSearch.get("DateOfBirth")).getTimeInMillis());但說公歷日期不能轉換為日期。有什么幫助嗎?
查看完整描述

2 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

( (GregorianCalendar) customerSearch.get( "DateOfBirth" ) )  // Retrieve and cast object of legacy class `GregorianCalendar`.

.toZonedDateTime()                                           // Convert from terrible legacy class to modern *java.time* class.

.toLocalDate()                                               // Extract the date-only portion, omitting time-of-day and time zone.

java.time

您正在使用,并且可能濫用,幾年前被JSR 310 定義的java.time類所取代的糟糕的日期時間類。

  • ZonedDateTime替換GregorianCalendar

  • Instant替換java.util.Date

  • LocalDate替換java.sql.Date

如果您必須與尚未更新為java.time的舊代碼進行互操作,則可以來回轉換。調用添加到舊類的新轉換方法。

GregorianCalendar gc = customerSearch… ;ZonedDateTime zdt = gt.toZonedDateTime() ;

如果您只想要沒有時間和時區的日期,請提取LocalDate.

LocalDate dateOfBirth = zdt.toLocalDate() ;

如果Date您的意思是java.sql.Date類,則應使用上述行而不是使用LocalDate.

如果Date你的意思是java.util.Date,那將是在那里使用的錯誤類。該類代表 UTC 中的一個時刻。GregorianCalendar通過從/到 UTC的分區時刻進行調整ZonedDateTime,您可以更改日期。

轉換

如果您需要一個對象與java.timejava.util.Date尚未更新的舊代碼進行互操作,您可以轉換。A代表 UTC 中的時刻,因此我們需要java.time中的等價物,也是 UTC 中的時刻,但具有更精細的納秒分辨率而不是毫秒。java.util.DateInstant

我們可以InstantZonedDateTime上面看到的中提取一個。實際上,這只是從分區值調整為 UTC 值。同一時刻,時間軸上的同一點,不同的掛鐘時間。

Instant instant = zdt.toInstant() ;  // Extract a `Instant`, adjusting from zone to UTC.

在舊類上使用新的轉換方法。

java.util.Date myJavaUtilDate = java.util.Date.from( instant ) ;  // Beware of possible data-loss in the fractional second, truncating from nanos to millis.

如果你需要去另一個方向,從傳統到現代。

Instant instant = myJavaUtilDate.toInstant() ;

使用適當的類型

如果您嘗試表示出生日期,通常會使用沒有時間和區域的日期,然后LocalDate在您的地圖中使用。類GregorianCalendar、java.util.DateZonedDateTime都代表一個時刻,即時間線上的一個特定點。它們不應該僅用于日期。

該類假裝是僅日期,但通過一個糟糕的設計決策,作為子類java.sql.Date實際上確實帶有時間和偏移/區域。如上所述,此類已被替換為.java.util.DateLocalDate

普通日期對象

沒有什么比任何其他日期時間類更“正?!?code>java.util.Date的java.sql.Date了。

  • java.util.Date代表 UTC 中的一個時刻,始終是 UTC,盡管它設計得非常糟糕toString的方法告訴你什么(謊言)。java.time.Instant當您需要 UTC 時間時,請改用。

  • java.sql.Date旨在表示僅日期,但正如所討論的,實際上在內部帶有時間和區域/偏移量。而是使用java.time.LocalDate來表示日期而不是時刻。

  • GregorianCalendar表示特定地區(時區)的人們使用的掛鐘時間中看到的時刻。而是ZonedDateTime用于此目的。

  • java.sql.Timestamp表示 UTC 中的一個時刻,但分辨率更精細,為納秒而不是毫秒。java.time中所有與時刻相關的類都使用納秒級的分辨率。因此,在 UTC 分辨率為 UTC 的情況下,請java.time.Instant使用Timestamp.

從 JDBC 4.2 開始,我們可以直接與數據庫交換java.time類。因此,無需再為您的數據庫工作而觸摸java.sql.Date或再次。java.sql.Timestamp



查看完整回答
反對 回復 2022-05-25
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

沒有 java 類GregorianDate。除非這是您自己的課程,否則您沒有提及。那么,以防萬一公歷日期只是一個常規Date的,因為今天世界上大多數人都使用公歷?那么您的地圖在您的 中包含什么類的實例HashMap<String, Object>?如果它只是一個常規Date,那么你的代碼應該是:

Date dateOfBirth = (Date)(customerSearch.get("DateOfBirth"));


查看完整回答
反對 回復 2022-05-25
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號