Moyen facile de convertir Java 8 LocalDateTime à Joda est LocalDateTime
Est-il un moyen facile de convertir Java 8 LocalDateTime à Joda est LocalDateTime?
L'un des moyens est de les convertir en String, puis de créer Joda est LocalDateTime de cette Chaîne.
Convertir en ISO formaté
Oui. J'ai fait de la même manière.
Pourquoi voulez-vous utiliser Joda Temps si vous utilisez déjà
Je suis à l'aide de java.le temps dans mon application. Mes applications dépend d'une bibliothèque qui est à l'aide de Joda time. C'est un cas particulier, où j'ai besoin de cette conversion.
String
et analyser de nouveau. Convertir en millisecondes écoulées depuis l'époqueOui. J'ai fait de la même manière.
Pourquoi voulez-vous utiliser Joda Temps si vous utilisez déjà
java.time
?Je suis à l'aide de java.le temps dans mon application. Mes applications dépend d'une bibliothèque qui est à l'aide de Joda time. C'est un cas particulier, où j'ai besoin de cette conversion.
OriginalL'auteur Naresh | 2015-10-09
Vous devez vous connecter pour publier un commentaire.
La conversion de l'époque millis (essentiellement un
java.util.Date()
):Seule ligne, mais long, donc "facile"? C'est toute relative.
OriginalL'auteur Andreas
Les deux localDate types se composent de
(year, month, date)
, il suffit donc de copier ces valeurs:OriginalL'auteur araqnid
Un peu plus courte méthode:
Si vous pouvez vous en sortir avec l'aide d'un
ZoneOffset
au lieu d'unZoneId
le code peut être raccourci légèrement.L'appel à la
atZone()
méthode peut être supprimée en fournissant le fuseau horaire à l'toInstant()
méthode.Explication plus détaillée
Juste pour clarifier, l'étape, j'ai enlevé est avec la création de l'intermédiaire ZonedDateTime objet. Cette partie de la séquence est toujours avec Java 8 API avant rien à voir avec Joda.
Le processus de conversion première consiste à convertir les Java 8 LocalDateTime le nombre de millis depuis l'époque. Ceci peut être réalisé dans un couple de différentes manières. Par exemple, dans Andreas réponse:
Ou mon alternative:
La différence, c'est que je suis ignorant de la création d'un Java 8 ZonedDateTime et, au lieu de passer le fuseau horaire à l'
toInstant()
méthode.Partir de ce point, les deux réponses sont les mêmes.
Mises en garde
Cela fonctionne bien lors de la conversion à l'aide des mêmes offset où aucune avancée modifications s'appliquent. Par exemple, l'UTC est toujours +0:00. Si vous avez besoin de les convertir à un fuseau horaire local où le décalage peut changer, alors vous aurez besoin de la réponse plus précise à l'aide de
atZone()
Un LocalDateTime à la fois avec l'API (Java 8 et Joda) est un DateTime sans un fuseau horaire. Toutefois, si vous avez le numéro de millis depuis l'époque alors vous avez besoin d'un décalage de dériver une date et une heure. Java 8 API nécessite soit un décalage ou le fuseau horaire pour être explicitement transmis, alors que la Joda API va utiliser le système par défaut si aucun n'est passé.
Plus précise de la façon de construire la Joda LocalDateTime serait:
Cela va seulement utiliser le fuseau horaire lors de la construction pour obtenir la date et l'heure correctes. Une fois que le constructeur a terminé le fuseau horaire ne fera pas partie de l'objet depuis LocalDateTime a pas de fuseau.
java8LDT.toInstant(ZoneOffset.UTC).toEpochMilli()
conduit à un résultat différent de celuijava8LDT.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli()
pour système ne fonctionne pas du systemDefault UTC!!Vous pouvez obtenir le décalage par
ZoneId.systemDefault().getRules().getOffset(java8LDT)
, mais je pense queatZone(..).toInstant()...
est beaucoup plus facile.C'était juste un exemple! Dans la pratique, vous ne l'appelez pas
.now()
dans Java 8 et le convertir en Joda quand vous pourriez obtenir l'heure actuelle directement à partir de Joda. Vous avez besoin de savoir l'implicite fuseau horaire qui s'applique àjava8LDT
et utilisez le bon décalage. Je peux voir pourquoi l'exemple peut avoir induit en erreur..now()
n'était pas le Point. La différence est à l'aide desystemDefault
au lieu deZoneOffset.UTC
. Ainsi, le code de la réponse sélectionnée s'exécute sur chaque machine, n'importe quel fuseau horaire est systemDefault.Et bien sûr, vous ne devriez pas utiliser toujours
systemDefault()
et je n'ai jamais dit que.OriginalL'auteur Ben Thurley