Embora o Joda seja rico em recursos e mais sofisticado que o tempo padrão do Java, nem sempre é a melhor coisa a se usar. Como decido se devo usar o Joda Time ou Java Time em qualquer código Java?
Existe algum tipo de orientação que nos diz como escolher a correta, dependendo de nossos requisitos?
Respostas:
O Joda Time é uma melhoria tão grande na biblioteca de tempos Java que quase sempre é a escolha certa, exceto pelas seguintes exceções:
Quando é difícil ou indesejável adicionar dependências de terceiros ao seu projeto
Quando seu uso em uma interface pública causaria problemas, por exemplo, obter um ORM para manipular os campos de tempo java e Joda
No entanto, no caso de 2), ainda seria melhor usar o Joda internamente, se possível.
Vale a pena lembrar das coisas acima, mas deve ser raro. Em caso de dúvida, vá com Joda.
fonte
Observe que no site da Joda-Time ele afirma:
O principal colaborador do Joda-Time , jodastephen , também é o principal colaborador do JSR-310, como pode ser visto no repositório do GitHub associado a http://www.threeten.org/ . By the way, jodastephen também tem um identificador de SO ...
Eu acho que é seguro afirmar que podemos nos sentir confortáveis e seguros com a nova API de data e hora, conforme fornecido no Java 8 em diante.
Algumas referências adicionais:
java.time.*
JavadocDate
Javadocfonte
A API de data padrão do Java é tão fundamentalmente quebrada que eu considerei simplesmente adicionar o Joda Time às extensões de biblioteca da JVM para carregá-lo no caminho de classe por padrão com o restante da API do Java.
Se você já foi encarregado de adaptar a internacionalização e os fusos horários em um aplicativo Java herdado e tentou usar a API Java padrão sozinho, entenderá o que quero dizer. Consegui transformar milhares de linhas de código asininas em menos de cem. O aumento da produtividade é inconcebível.
Além disso, a API Date padrão não é intuitiva, onde a API Joda fluida pode ser capturada em horas, não em semanas. Sua analogia de tentar chegar à ilha que fica a três quilômetros de distância é mais parecida com a seguinte.
Ou...
Como outras respostas declararam, as poucas desvantagens, como o ORM, estão se tornando inexistentes, pois o Hibernate agora possui plug-ins que permitem mapear as propriedades do bean do tipo Joda para os campos de data / hora do banco de dados. A JPA também pode ter uma resposta para isso.
Se você deseja que seu aplicativo tenha uma pegada minimalista como um aplicativo de desktop no que diz respeito ao espaço em disco, talvez o Java nem seja a escolha certa da linguagem.
fonte
Mais um ponto: Java-Time (ie
Date
) não é ThreadSafe, mas JodaTime. Portanto, o JodaTime é preferido quando requisitos comoOu então, para aplicativos simples, o Java-Time é bom.
fonte
java.time
é implementada através da imutabilidade. Consulte stackoverflow.com/questions/9303532/… . Isso funciona bem para aplicativos simples e complexos. Até o documento api afirma que "Todas as classes são imutáveis e seguras para threads" (literalmente citadas no segundo parágrafo). Asjava.util
classes antigas , por outro lado, têm vários problemas. Sei que esta resposta se refere a esta última, mas importante fazer essa distinção agora.A estrutura java.time substitui as classes de data e hora herdadas e o Joda-Time
Atualização: As antigas classes de data e hora fornecidas com as versões mais antigas do Java agora são herdadas, oficialmente suplantadas pelas classes java.time incorporadas no Java 8, Java 9 e posterior.
Date
,Calendar
,SimpleDateFormat
, E asjava.sql.*
aulas de data e hora todos devem ser evitados. Nunca é necessário usar essas classes confusas, problemáticas e mal projetadas. Eles são totalmente substituídos pelas classes java.time. Seu único objetivo agora é manter o código antigo existente. Ao fazer interface com o código antigo, você pode converter de / para java.time chamando novos métodos adicionados às classes antigas. Para obter mais informações sobre a conversão, consulte: Converter java.util.Date para que tipo "java.time"? .O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para as classes java.time . O projeto Joda-Time inspirou a estrutura java.time. Ambos são liderados pelo mesmo homem, Stephen Colebourne . Você pode pensar em java.time como uma reescrita / reformulação do Joda-Time, um código totalmente novo, mas usando o que foi aprendido ao longo dos anos ao criar a primeira biblioteca de data e hora abrangente e sofisticada do setor.
Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações.
Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport e adaptada ainda mais ao Android no ThreeTenABP (consulte Como usar ... ).
O projeto ThreeTen-Extra estende o java.time com classes adicionais. Este projeto é um campo de prova para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como
Interval
,YearWeek
,YearQuarter
, e mais .fonte