Eu estou trabalhando em um projeto em Java e eu preciso mudar diferentes tipos de datas para o outro como (Gregoriano para Chinês e vice-versa e Gregoriano para Hijri e vice-versa). Eu tento usar Time4j que tem esta facilidade para converter diferentes tipos de datas para o outro, mas, infelizmente, eu não entendia como trabalhar com esta biblioteca, mesmo depois que eu tentei ler sua documentação.
Agora eu estou tentando converter data gregoriana a data chinês, mas eu não posso começar o ano normal na data chinês quando eu uso object.getYear()
ele retorna ano cíclica mas eu preciso de ano normal como 2019.
Este é meu código:
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]
}
}
Eu preciso este tipo de ano ji-hai (2019) e é padrão toString()
método e quando eu usar object.getYear()
método retorna ji-hai (36) .
Agora, como posso alterar o meu valor de retorno de ji-hai (36) para ji-hai (2019) . Além disso, se eu quiser receber a data Gregoriana de um usuário como devo preparado para esta conversão? Posso recebê-lo como um texto de Cordas e lançá-lo aos data gregoriana e, em seguida, usá-lo? Será que é possível?
Também se você conhece um bom recurso que explica o uso de classes e métodos de Time4j com exemplo por favor compartilhá-lo comigo.
obrigado.
solução de curto:
Em vez de tentar contar com os toString()
-Métodos de vários tipos, como CyclicYear
etc, eu recomendo usar um motor de formato dedicado que é capaz de lidar calendário chinês. Time4J tem o seu próprio motor de formato com base na classe 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)
Padrão e anos chineses:
I ter usado o padrão de "d / M / L (r)". O ano "normal" do calendário chinês é o ano cíclico representado pelo símbolo padrão CLDR "U". Anos Cycliy repetir após 60 anos de iniciar um novo ciclo. Qualquer outra definição de ano é claramente incomum. Isso pode surpreender os usuários ocidentais porque muitas vezes eles esperam que haja qualquer tipo de contagem de ano proleptic apenas de uma maneira para a frente. No entanto, Time4J também suporta dois outros tipos de anos. Um deles é o ano da era que agora é apenas de interesse histórico. E o outro tipo de ano é o ano gregoriano relacionada (usando o símbolo padrão de "r"). Seu principal objetivo é apenas para fazer o ano cíclica sem ambiguidades. Por isso muitas pessoas gostam de estruturar anos chineses como uma combinação de ano cíclica e ano gregoriano relacionado nesta forma:
U(r) or r(U)
É ainda possível determinar o zodíaco chinês que se repete depois de apenas 12 anos. Dado que você tem um objeto calendário chinês, você pode determinar o zodíaco desta forma:
String zodiac = obj.getYear().getZodiac(Locale.ENGLISH);
System.out.println("Year of " + zodiac); // Year of Pig
maneira inversa (análise e transformando a gregoriano):
Basta usar o formatador definido acima e, em seguida, analisar:
PlainDate gregorian = f.parse("1/9/ji-hai(2019)").transform(PlainDate.axis());
System.out.println(gregorian); // output: 2019-09-29
transcrições sobre:
Eu tenho usado o local raiz para a construção do formatador. Ela produz o ano cíclica em letras latinas simples, sem quaisquer sinais diacríticos. Se você pode querer usar a transcrição oficial pinyin você pode aplicar o Inglês locale vez. O ano cíclica, então, aparecem como "jǐ-Hai". transcrições especiais utilizando outros scripts são suportados para o idioma Chinês (mesmo script também para coreano e japonês), vietnamita e russo.
A API-documentação de Time4J podem ser encontrados on-line . O doc já contém exemplos para a formatação e análise do calendário chinês. Mas congratulo-me com quaisquer outras contribuições para ele ou sugestões concretas para melhorá-lo.