Qu'est-ce que ce format de date? 2011-08-12T20:17:46.384 Z
J'ai la date suivante: 2011-08-12T20:17:46.384Z
. Ce format est-ce? Je suis en train de l'analyser avec Java 1.4 via DateFormat.getDateInstance().parse(dateStr)
et je suis de
java.texte.ParseException: Unparseable date: "2011-08-12T20:17:46.384 Z"
Je pense que je devrais être à l'aide de SimpleDateFormat pour l'analyse, mais je sais que le format de la chaîne. Tout ce que j'ai pour que la mesure est yyyy-MM-dd
, parce que je ne sais pas ce que le T
signifie dans cette chaîne, quelque chose de fuseau horaire-ils liés? Cette chaîne de date est à venir à partir de la lcmis:downloadedOn
tag indiqué sur Fichiers CMIS de l'historique de téléchargement type de média.
- C'est ISO 8601
- il n'est pas. ISO8601 n'a pas le Z à la fin.
- ISO8601 doe permettre un Z à la fin. Voir le lien ci-dessus, cherchez l'UTC.
- Le
Z
à la fin est courte pourZulu
et dire que UTC. Ce format est certainement plus partie de la ISO 8601 la collection de la norme date-heure de formats de texte. Par ailleurs, ces formats standard sont utilisés par défaut dans le java.les classes de temps. - Pour info, le gênants vieille date-heure classes telles que
java.util.Date
,java.util.Calendar
, etjava.text.SimpleDateFormat
sont maintenant héritage, supplantée par la java.de temps les classes intégré dans Java 8 & Java 9. Voir Tutoriel Oracle.
Vous devez vous connecter pour publier un commentaire.
Le T est juste un littéral de séparer la date de l'heure, et le Z signifie "zéro décalage de l'heure", également connu comme "Zulu" (UTC). Si vos cordes toujours ont un "Z", vous pouvez utiliser:
Ou à l'aide de Joda Time, vous pouvez utiliser
ISODateTimeFormat.dateTime()
.T
etZ
?T
(je ne me souviens pas comment SimpleDateFormat poignées inconnu prescripteurs), mais pourZ
nous voulons qu'il soit le caractère " Z " plutôt que "un décalage UTC valeur" (par exemple, "00").2017-03-10T06:00:00.000+11:00
s'il vous PLAÎT AIDER+11:00
SImpleDateFormat
... et puis vous avez besoin de temps de la zone que vous êtes réellement intéressé.setTimeZene
est très important que Z désigne le décalage de zéro à partir de ce fuseau horaire.setTimeZone
à l'UTC, puis ma date de formateur converti une chaîne de date dans le format comme2011-08-12T15:17:46.384Z
à2011-08-12T20:17:46.384Z
, effectivement la pensée de la chaîne d'origine que j'ai donné était dans mon propre fuseau horaire (heure de l'est). Une fois que j'aisetTimeZone
à l'UTC le résultat converti devenu correct. Bien sûr, j'ai été en utilisant Swift, mais la syntaxe est proche de ce que vous avez posté ici. Pourriez-vous essayer en Java sanssetTimeZone
et de comparer la différence? MercisetTimeZone
n'était pas nécessaire. Il est absolument. Je suis en train de dire que Z ne veut pas dire "le décalage de zéro à partir de ce moment la zone" - cela signifie "UTC" (ou "décalage du zéro de l'UTC" si vous voulez).tl;dr
Standard ISO 8601 format est utilisé par votre chaîne d'entrée.
ISO 8601
Ce format est défini par le sensible, la pratique standard, ISO 8601.
La
T
sépare la partie date de l'époque de la partie jour. LeZ
sur la fin signifie UTC (qui est, d'un décalage de l'heure UTC de zéro heures-minutes-secondes). LeZ
est prononcé “Zoulou”.java.temps
La vieille date-heure classes livré avec les premières versions de Java se sont avérés être mal conçu, déroutant, et gênants. Les éviter.
Au lieu de cela, utilisez la java.le temps cadre intégré dans Java 8 et les versions ultérieures. La java.les classes de temps supplanter l'ancien date du temps des classes et du succès de Joda-Time library.
La java.les classes de temps d'utilisation ISO 8601 par défaut lors de l'analyse, produire des représentations textuelles de la date-heure de valeurs.
La
Instantané
classe représente un moment dans le scénario de UTC avec une résolution de nanosecondes. Cette classe peut directement analyser votre chaîne d'entrée sans se soucier de définir une mise en forme du motif.Sur java.temps
La java.temps cadre est intégré dans Java 8 et les versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date du temps des classes comme
java.util.Date
,Agenda
, &SimpleDateFormat
.La Joda-Time projet, maintenant dans le mode de maintenance, conseille la migration vers le java.le temps classes.
Pour en savoir plus, consultez les Oracle Tutoriel. Et de recherche de Débordement de Pile pour de nombreux exemples et des explications. La spécification est JSR 310.
Où obtenir le java.les classes de temps?
La ThreeTen-Extra projet s'étend java.temps avec d'autres classes. Ce projet est un terrain d'essai pour de possibles futurs ajouts à java.temps. Vous pouvez trouver quelques classes utiles ici comme
Intervalle
,YearWeek
,YearQuarter
, et plus.Pas sûr au sujet de la Java de l'analyse, mais c'est ISO8601: http://en.wikipedia.org/wiki/ISO_8601
Il y a d'autres façons de l'analyser, plutôt que la première réponse. Il parse:
(1) Si vous souhaitez obtenir des informations sur la date et l'heure, vous pouvez l'analyser pour un
ZonedDatetime
(depuis Java 8) ouDate
(vieux) objet:ou
(2) Si vous n'avez pas de soins de la date et de l'heure et vous voulez juste de traiter l'information comme un moment de nanosecondes, alors vous pouvez utiliser
Instant
:Vous pouvez utiliser l'exemple suivant.
Z
. Cela signifie que d'attendre, mais d'ignorer cette lettre. Mais cette lettre ne doit pas être ignoré. Cette lettre fournit de l'information utile, le fait que la chaîne a été prévu pour l'UTC, un décalage de zéro. Votre format est mise au rebut de ce fait important. En outre, il n'y a même pas besoin de la peine de définir ce format. Un formateur pour ce modèle est construit en.Si vous les gars sont à la recherche d'une solution pour Android, vous pouvez utiliser le code suivant pour obtenir de l'époque secondes à partir de l'horodatage de la chaîne.
D'entrée d'échantillon: 2019-10-15T05:51:31.537979 Z
Exemple de sortie: 1571128673
Cette technique se traduit par java.util.Date au format UTC (ou autre) et de retour à nouveau.
Définir une classe comme ceci:
}
Puis l'utiliser comme ceci:
ou
Vous pouvez également définir d'autres formats de date si vous avez besoin (et pas seulement UTC)
java.util.Date
et le Joda-Time projet ont été supplantés ans par le moderne java.temps les classes définies dans la JSR 310. Le conseil ici est dépassée depuis longtemps.@Jean-Skeet m'a donné l'idée de fixer mon propre autour de cette question. Comme un jeune programmeur de ce petit problème est facile à manquer et difficile à diagnostiquer. Donc, Im partage dans l'espoir que cela aidera quelqu'un.
Mon problème était que je voulais analyser la chaîne suivante contraingant un horodatage à partir d'un JSON je n'ai aucune influence sur et de le mettre en plus des variables utiles. Mais j'ai continué de faire des erreurs.
Donc le suivant (attention à la chaîne de paramètre à l'intérieur de ofPattern();
Erreur:
Le problème? Le Z à la fin du Motif doit être enveloppé dans un " Z " comme le 'T' est. Changement
"yyyyMMdd'T'HHmmss.SSSZ"
à"yyyyMMdd'T'HHmmss.SSS'Z'"
et il fonctionne.Retrait de la Z à partir de la structure ensemble a également conduit à des erreurs.
Franchement, je m'attends à une classe Java à avoir anticipé cette.
T
est un littéral et doit être cité,Z
est un décalage (de zéro) et doit être analysée en tant que telle, ou vous obtiendrez des résultats faux. Je ne sais pas ce que tu veux dire qu'il n'a pas été prévu, je crois qu'il a fait.Z
. Vous êtes rejet de précieuses informations. Le traitement d'une date de valeur tout en ignorant le fuseau horaire et le décalage de l'heure UTC est comme la transformation d'une somme d'argent tout en ignorant la monnaie!T
sépare seulement la partie date de l'époque de la partie jour, et n'ajoute pas de sens. LeZ
sur l'autre main ajoute certainement un sens.