私はJavaでプロジェクトに取り組んでいると私は(グレゴリオ中国へとその逆とグレゴリオイスラム暦へ、またはその逆)のような、相互に日付の種類を変更する必要があります。私が使用しようTime4jを相互に日付の異なる種類を変換するには、この機能を有しているが、残念ながら、私はそのドキュメントを読むことを試みた後でも、このライブラリを使用する方法を理解していませんでした。
今、私は中国の日付にグレゴリオ暦の日付を変換しようとしていますが、私は得ることができない通常の年、私が使用した場合、中国日付でobject.getYear()
、それは巡回年を返しますが、私は2019年のような通常の年を必要としています。
これは私のコードです:
import net.time4j.PlainDate;
import net.time4j.calendar.ChineseCalendar;
public class DateConverter {
static PlainDate gregorian = PlainDate.nowInSystemTime();
static ChineseCalendar obj = gregorian.transform(ChineseCalendar.axis());
public static void main(String[] args) {
String result = obj.getMonth() + "/" + obj.getDayOfMonth() + "/" + obj.getYear() ;
System.out.println(result); // 8/30/ji-hai(36)
System.out.println(obj); // chinese[ji-hai(2019)-8-30]
}
}
私は今年のこのタイプの必要JI-海(2019) 、それがデフォルトであるtoString()
方法、私が使用した場合object.getYear()
の方法をそれが返しJI-海(36) 。
今どのように私は私からの戻り値を変更することができJI-海(36)にJI-海(2019) 。また、私は、私は、この変換のために用意しなければならないか、ユーザーからグレゴリオ暦の日付を受信したい場合は?私はそれが文字列テキストとして受け取り、それはグレゴリオ暦の日付にキャストし、それを使用することはできますか?ですが可能ですか?
あなたは一例でTime4jのクラスやメソッドの使用法を説明する優れたリソースを知っていればまた、私と一緒にそれを共有してください。
ありがとうございました。
ショートソリューション:
代わりに依存しようとしているのtoString()
ような様々なタイプの-methods CyclicYear
など、私は中国のカレンダーを扱うことができる専用のフォーマットエンジンを使用することをお勧めします。Time4Jは、クラスに基づいた独自のフォーマットエンジンを持っていChronoFormatter:
ChineseCalendar obj = PlainDate.nowInSystemTime().transform(ChineseCalendar.axis());
ChronoFormatter<ChineseCalendar> f =
ChronoFormatter.ofPattern(
"d/M/U(r)",
PatternType.CLDR,
Locale.ROOT,
ChineseCalendar.axis());
System.out.println(f.print(obj));
// output today: 1/9/ji-hai(2019)
パターンと中国語年:
私は、パターン"D / M / U(R)"を使用しています。中国暦の「正常な」年はCLDRパターン記号「U」で表される環状年です。Cycliy年は、60年には、新たなサイクルを開始した後に繰り返します。今年の任意の他の定義は明確に珍しいです。彼らはしばしば単にフォワード的でproleptic年カウントのいずれかの種類があることを期待するので、これは西洋のユーザーを驚かせるかもしれません。しかし、Time4Jも年の二つの他の種類をサポートしています。一つは、今は歴史的な関心のある時代の年です。そして、今年の他のタイプは、(パターン記号「R」を使用して)関連グレゴリオ暦の年です。その主な目的は、単に巡回年が曖昧でないようにすることです。したがって、多くの人々は、このフォーム中の環状年および関連グレゴリオ暦の年の組み合わせとして中国の年を構築したいです。
U(r) or r(U)
わずか12年後に繰り返す干支を決定することも可能です。あなたは中国のカレンダーオブジェクトを持って考えると、あなたは干支をこのように決定することができます:
String zodiac = obj.getYear().getZodiac(Locale.ENGLISH);
System.out.println("Year of " + zodiac); // Year of Pig
逆方法(解析とグレゴリオへの変換)
ただ、上で定義されたフォーマッタを使用して、解析:
PlainDate gregorian = f.parse("1/9/ji-hai(2019)").transform(PlainDate.axis());
System.out.println(gregorian); // output: 2019-09-29
トランスクリプションについて:
私は、フォーマッタを構築するためのルートロケールを使用していました。これは、任意の付加記号なし、簡単なラテン文字で巡回年を生成します。あなたは公式ピンイン転写を使用することがあります場合は、代わりに英語のロケールを適用することができます。巡回今年は、「jǐ-HAI」と表示されます。他のスクリプトを使用した特別なトランスクリプションは、言語中国語(韓国と日本のためにも、同じスクリプト)、ベトナム語、ロシア語のためにサポートされています。
Time4JのAPI-ドキュメントを見つけることができるオンライン。ドキュメントは、すでに中国のカレンダーをフォーマットし、解析するための例が含まれています。しかし、私はそれを改善することや具体的な提案への更なる貢献を歓迎します。