java.time Modèle DateTimeFormatter pour le décalage de fuseau horaire
Je suis en train d'analyser: 2014-05-02-10.45.05.993280-5:00
où la -5:00
est le décalage par rapport à UTC. À l'aide de java.temps DateTimeFormatter
dans Java 8.
Pour la première bits j'ai le texte suivant: yyyy-MM-dd-HH.mm.ss.SSSSSS
cependant, je ne peux pas comprendre ce que le modèle devrait être d'analyser le décalage aussi.
Si j'avais le décalage avec 4 chiffres (-05:00) je pourrais utiliser: yyyy-MM-dd-HH.mm.ss.SSSSSSxxx
mais cela ne fonctionne pas pour les 3 chiffres.
Des idées?
source d'informationauteur Cheetah | 2015-06-08
Vous devez vous connecter pour publier un commentaire.
Utiliser le capital de la lettre X au lieu de x, d'où XXX. La différence est que big X peut reconnaître l'apport de la lettre "Z" comme UTC Offset +00:00 tout petit modèle de lettre X ne peut pas.
Suggéré modèle:
S'il vous plaît être également au courant de la suite JDK-bug:
Mise à JOUR:
J'ai testé la solution de contournement décrite dans le bug-log.
Mais il déclenche une exception:
Si clémente analyse n'aide pas non plus. Il y a donc, actuellement, seulement trois options pour vous:
Utiliser la solution de contournement proposé par le rapporteur de bug: [...] solution de contournement consiste à analyser les date/heure séparément, utiliser une main codé de l'analyseur pour l'offset et de combiner les LocalDateTime avec la main analysé décalage. Pas facile à contourner.
Essayez votre propre spécialisés chaîne de prétraitement. Si vous avez un format fixe, alors vous pouvez essayer d'insérer le zéro chiffre à la position 26 (si l'apport total de la longueur est un chiffre trop petit).
Ou vous pouvez utiliser une bibliothèque externe qui peut le faire. Ma bibliothèque Time4J (v4.0) peut le faire que si vous êtes prêt à ajouter un supplément de dépendance. Voir ce code:
String input = "2014-05-02-10.45.05.993280-5:00";
ZonalDateTime zdt =
ZonalDateTime.parse(
input,
Moment.localFormatter("yyyy-MM-dd-HH.mm.ss.SSSSSSXXX", PatternType.CLDR));
System.out.println(zdt); //2014-05-02T10:45:05,993280UTC-05:00
ZonedDateTime result = zdt.toTemporalAccessor();
Mise à jour: Selon JDK-bug-statut, le bogue a été corrigé pour Java-9, mais un backport pour Java-8 ne semble pas être disponible.
De décalage pour
SimpleDateFormat
signe estZ
vérifierJava7
ouJava8
SimpleDateFormat API
.Ensuite, votre analyseur format pour
String
doit être:
Mise à JOUR: pour
DateTimeFormatter
le décalage Modèles pour la mise en forme et l'Analyse sont:Votre modèle désiré dans
DateTimeFormatter
estX
.