簡體   English   中英

如何實現波斯日歷

[英]How to implement Persian Calendar

JavaFx上是否有波斯日歷DatePicker的實現?

在DatePicker上沒有可以使用波斯chronology來實現波斯日歷

我現在開發了一個即用型日歷選擇器,該選擇器還提供了波斯日歷。 它最初的靈感來自克里斯汀·舒特(Christian Schudt)的出色作品,但經過完全重寫和增強。 只需下載我的庫Time4J -v4.20(或更高版本,在Maven中可用)並使用以下代碼演示

CalendarPicker<PersianCalendar> picker = picker.persianWithSystemDefaults();

picker.setLengthOfAnimations(Duration.seconds(0.7));
picker.setShowInfoLabel(true);
picker.setLocale(new Locale("fa", "IR"));
picker.setShowWeeks(true);

picker.setCellCustomizer(
  (cell, column, row, model, date) -> {
    if (CellCustomizer.isWeekend(column, model)) {
      cell.setStyle("-fx-background-color: #FFE0E0;");
      cell.setDisable(true);
    }
  }
);

您還可以設置其他屬性,例如最短日期和最長日期。 這是使用波斯語和伊朗本地化星期模型的示例圖像。 您可以瀏覽波斯語的所有月份,年份或十年(通過單擊頁眉),也可以跳轉到當前日期(通過單擊頁腳)。

在此處輸入圖片說明

正如文檔中所述,您可以通過DatePickerObjectProperty<Chronology>設置使用的日歷系統。 您需要這樣做的方法是

public final void setChronology(Chronology value)

由於沒有實現默認的波斯/伊朗日歷系統(僅實現了hiraj系統),因此您必須編寫自己的日歷:

添加新日歷可以由應用程序擴展可用時間集。添加新日歷系統需要編寫Chronology,ChronoLocalDate和Era的實現。特定於日歷系統的大多數邏輯將在ChronoLocalDate實現中。年表實現充當工廠。

為了允許發現其他時間順序,使用了ServiceLoader。 必須將名稱為“ java.time.chrono.Chronology”的文件添加到META-INF / services目錄,其中列出了實現類。 有關服務加載的更多詳細信息,請參見ServiceLoader。 對於按id或calendarType進行查找,首先找到系統提供的日歷,然后再找到應用程序提供的日歷。

每個年表必須定義一個在系統內唯一的年表ID。 如果時間順序代表由CLDR規范定義的日歷系統,則日歷類型是CLDR類型以及CLDR變體(如果適用)的串聯,

實施要求:必須謹慎實施此接口,以確保其他類正確運行。 可以實例化的所有實現必須是最終的,不可變的並且是線程安全的。 子類應盡可能可序列化。”來源: https : //docs.oracle.com/javase/8/docs/api/java/time/chrono/Chronology.html? is-external =true

暫無
暫無

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

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