簡體   English   中英

從 Java 日歷實例中獲取日、月、年

[英]Get Day, Month, Year from Java Calendar instance

我有一個從 Java Calendar派生的Instant ,例如c.toInstant() ,現在在不同的位置將其轉換為自定義日期 ZA8CFDE6331BD59EB2AC96F8911C4B66 的月份和年份。 我試過了:

    if (instance.isSupported(ChronoField.DAY_OF_MONTH) && instance.isSupported(ChronoField.MONTH_OF_YEAR) && instance.isSupported(ChronoField.YEAR)) {
      return new com.company.common.Date()
          .setDay(instance.get(ChronoField.DAY_OF_MONTH))
          .setMonth(instance.get(ChronoField.MONTH_OF_YEAR))
          .setYear(instance.get(ChronoField.YEAR));
    }

但是當我嘗試編譯 ErrorProne 時會拋出:

...impl/utils/DateUtils.java:21: error: [TemporalAccessorGetChronoField] TemporalAccessor.get() only works for certain values of ChronoField.
          .setDay(instance.get(ChronoField.DAY_OF_MONTH))
                              ^

我不確定為什么我在任何地方都找不到答案,但經過一番搜索后,我沒有找到任何有用的東西——盡管我可能錯過了一些東西。

Instant 只是一個時間戳——它只提供秒、毫秒和納秒。

如果您首先從日歷實例開始,您應該能夠簡單地使用

calendar.get(Calendar.YEAR)
calendar.get(Calendar.MONTH)
calendar.get(Calendar.DAY_OF_YEAR)

直接獲取日期值並跳過轉換為 Instant。

如果您更喜歡使用較新的時間 API 您可以從 ZonedDateTime 中獲取日期和時間,例如

    Calendar calendar = Calendar.getInstance();
    ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(calendar.toInstant(), calendar.getTimeZone().toZoneId());

    zonedDateTime.getYear();
    zonedDateTime.getMonthValue();
    zonedDateTime.getDayOfMonth();

我沒有看到給出的示例的直接優勢,但如果您想使用更新的 java.util.time API 的更多功能,它可能會很有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM