Convertir aaaa-MM-jj PAS'HH:mm:ss.mmm Z " à la normale “HH:mm” format
J'ai un problème dans l'affichage de la date dans mon Application.
Je suis timestamp comme:
2017-08-02T06:05:30.000 Z
Mais aussi par ce que le temps réel est:
2017:08:02 11:35 AM
Mais après la conversion à l'aide de mon code, il affiche l'heure comme:
6:00 am
Comment le montrer comme heure actuelle?
Mon code est donné ci-dessous:
private static SimpleDateFormat timestampformat =
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.mmm'Z'");
private static SimpleDateFormat sdftimeformat = new SimpleDateFormat("HH:mm a");
private static SimpleDateFormat getSdftimeformat() {
return sdftimeformat;
}
public static String timeStampConvertToTime(String time) {
Date date1 = null;
try {
date1 = timestampformat.parse(time);
} catch (ParseException e) {
e.printStackTrace();
}
String formattedTime = getSdftimeformat().format(date1);
return formattedTime;
}
- où est cette méthode: getSdftimeformat() ?
- vérifiez le fichier de réponse
InformationsquelleAutor Rose | 2017-08-02
Vous devez vous connecter pour publier un commentaire.
La première chose est que vous utilisez
mm:ss.mmm
dans le format de votre. SelonSimpleDateFormat
javadoc,m
représente les minutes, donc vous devez le modifier pourmm:ss.SSS
parce queS
représente le millisecondes.Un autre détail, c'est que le
Z
à la fin est le fuseau horaire indicateur de l'UTC et il ne peut pas être ignoré (au moins, il ne devrait pas). Vous devez utiliser le modèle correspondant pour cela, qui estX
:PS: la
X
modèle a été introduit dans Java 7. Si vous utilisez Java <= 6, la seule alternative est de traiterZ
comme un littéral (une vilaine solution de contournement, je l'avoue) et de régler l'UTC comme le fuseau horaire utilisé par l'analyseur:Avec cela, la date de la valeur correspondant à 06:05 UTC. Pour le format de l'heure de votre fuseau horaire, vous devez utiliser un autre
SimpleDateFormat
avec le correspondant fuseau horaire:La sortie sera:
Si vous ne définissez pas un fuseau horaire, il va utiliser par défaut du système. Mais la valeur par défaut peut être modifié sans préavis, même au moment de l'exécution, il est donc préférable de définir explicitement un fuseau horaire spécifique comme ci-dessus.
J'ai aussi utilisé
java.util.Locale
pour définir la langue anglaise, parce que certaines régions peuvent avoir des symboles différents pour AM/PM. Si vous ne spécifiez pas, il va utiliser le système par défaut et il n'est pas garanti d'être l'un dans lequel les symboles sont ceux dont vous avez besoin (certains paramètres régionaux utilise "h/h" ou l'autre des formats différents, il est donc préférable d'utiliser explicitement des paramètres régionaux).Java nouvelle Date/Heure API
Les anciennes classes (
Date
,Calendar
etSimpleDateFormat
) ont beaucoup de problèmes et les problèmes de conception, et ils sont remplacés par la nouvelle Api.Si vous utilisez Java 8, pensez à utiliser le new java.le temps de l'API. Il est plus facile, moins buggé et moins sujette aux erreurs que l'ancienne Api.
Si vous utilisez Java <= 7, vous pouvez utiliser le ThreeTen Backport, un grand backport pour Java 8 est la nouvelle date/heure de cours. Et pour Android, il y a le ThreeTenABP (en savoir plus sur la façon de l'utiliser ici).
Le code ci-dessous fonctionne pour les deux.
La seule différence est le nom des paquets (en Java 8 est
java.time
et dans ThreeTen Backport (ou Android ThreeTenABP) estorg.threeten.bp
), mais les classes et les méthodes noms sont les mêmes.Pour analyser l'entrée, vous pouvez utiliser le
ZonedDateTime
classe, qui possède un support complet pour les fuseaux horaires et il fait la conversion à une autre des zones très facile. Ensuite, vous utilisez unDateTimeFormatter
pour le format de sortie:La sortie sera:
Si l'entrée toujours a
Z
en fin de compte, vous pouvez également utiliser leInstant
classe:Notez que j'ai utilisé
hh
pour les heures: ce format à l'aide des valeurs de 1 à 12 (cela fait du sens parce que je suis aussi à l'aide de l'AM/PM indicatifs). Si vous souhaitez que les valeurs de 0 à 23, utilisezHH
au lieu - vérifier la javadoc pour plus de détails.Également noter que l'API utilise IANA noms de fuseaux horaires (toujours dans le format
Region/City
, commeAsia/Kolkata
ouEurope/Berlin
).Éviter l'utilisation de la 3-lettre d'abréviations (comme
CST
ouIST
) parce qu'ils sont ambiguës et ne pas standard.Vous pouvez obtenir une liste de fuseaux horaires (et de choisir celui qui s'adapte le mieux à votre système) en appelant
ZoneId.getAvailableZoneIds()
.Vous pouvez également utiliser le système de fuseau horaire par défaut avec
ZoneId.systemDefault()
, mais cela peut être modifié sans préavis, même au moment de l'exécution, il est donc préférable d'explicitement d'utiliser un spécifique.Vous devez utiliser la classe SimpleDateFormat et de spécifier le format que vous souhaitez analyser , comme ceci :
essayer ce votre obtiendra le résultat
l'utiliser pour obtenir l'heure actuelle.
changement de fuseau horaire de votre zone de temps
Je suppose que le Z en Rose timestamp est zulu time, il n'est pas vraiment correct pour le code de la conversion de la zulu temps de sa zone de l'heure locale (GMT+5:30 nous sommes à supposer). Il peut être OK, si c'est toujours le retour Z, mais si c'est
militaire fuseaux horaires vous aurait besoin de quelque chose qui peut gérer tous les fuseaux horaires.
Cette question précédente implique qu'il n'y est pas intégré dans la façon de le faire. Besoin de comprendre d'où vient l'heure est venue de vraiment répondre à la question.