web-dev-qa-db-fra.com

Comment convertir un horodatage du format aaaa-MM-jj-mmh: mm: ss: SSSZ au format MM/jj/aaaa hh: mm: ss.SSS? D'ISO8601 à UTC

Je souhaite convertir l'horodatage 2011-03-10T11: 54: 30.207Z au 10/03/2011 11: 54: 30.207. Comment puis-je faire ceci? Je souhaite convertir le format ISO8601 en UTC, qui doit être sensible à l'emplacement. S'il vous plaît aider

String str_date="2011-03-10T11:54:30.207Z";
DateFormat formatter ;
Date date ;
formatter = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss.SSS");
date = (Date)formatter.parse(str_date);
System.out.println("output: " +date );

Exception: Java.text.ParseException: date imparable: "2011-03-10T11: 54: 30.207Z"

26
user617966

Tout d'abord, vous devez savoir que le format UTC n'est pas un format, mais bien un fuseau horaire. Donc, "convertir d'ISO8601 en UTC" n'a pas vraiment de sens en tant que concept.

Cependant, voici un exemple de programme utilisant Joda Time, qui analyse le texte dans une variable DateTime, puis le formate. Je suppose que vous voudrez peut-être utiliser le format - vous n'avez pas vraiment fourni suffisamment d'informations sur ce que vous essayez de faire pour en dire plus que cela. Vous pouvez également vouloir prendre en compte les fuseaux horaires ... voulez-vous afficher l'heure locale à l'instant spécifié? Si tel est le cas, vous devrez déterminer le fuseau horaire de l'utilisateur et effectuer la conversion appropriée.

import org.joda.time.*;
import org.joda.time.format.*;

public class Test {
    public static void main(String[] args) {
        String text = "2011-03-10T11:54:30.207Z";
        DateTimeFormatter parser = ISODateTimeFormat.dateTime();
        DateTime dt = parser.parseDateTime(text);

        DateTimeFormatter formatter = DateTimeFormat.mediumDateTime();
        System.out.println(formatter.print(dt));
    }
}
31
Jon Skeet

Oui. vous pouvez utiliser SimpleDateFormat comme ceci.

SimpleDateFormat formatter, FORMATTER;
formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
String oldDate = "2011-03-10T11:54:30.207Z";
Date date = formatter.parse(oldDate.substring(0, 24));
FORMATTER = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSS");
System.out.println("OldDate-->"+oldDate);
System.out.println("NewDate-->"+FORMATTER.format(date));

Sortie OldDate -> 2011-03-10T11: 54: 30.207Z NewDate -> 10-Mar-2011 11: 54: 30.207

29
user617966

J'espère que cela t'aides:

public String getSystemTimeInBelowFormat() {
    String timestamp = new SimpleDateFormat("yyyy-mm-dd 'T' HH:MM:SS.mmm-HH:SS").format(new Date());
    return timestamp;
}
0
Abdul K Shaikh

Vous voudrez peut-être jeter un coup d'œil à joda time , qui est un peu plus facile à utiliser que les outils de date natifs Java et fournit de nombreux modèles de date courants prédéfinis.

En réponse aux commentaires, plus de détails:

Pour ce faire, à l'aide de l'heure Joda, vous avez besoin de deux DateTimeFormatters - un pour que votre format d'entrée analyse votre entrée et un pour votre format de sortie afin d'imprimer votre sortie. Votre format d'entrée est un format standard ISO. La classe ISODateTimeFormat de Joda time possède déjà une méthode statique avec un analyseur syntaxique: dateHourMinuteSecondMillis . Votre format de sortie n'est pas celui pour lequel ils ont un formateur pré-construit, vous devrez donc en créer un vous-même en utilisant DateTimeFormat . Je pense que DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS"); devrait faire l'affaire. Une fois que vous avez vos deux formateurs, appelez la méthode parseDateTime() sur le format d'entrée et la méthode print sur le format de sortie pour obtenir votre résultat sous forme de chaîne.

Le mettre ensemble devrait ressembler à quelque chose comme ça (avertissement, non testé):

DateTimeFormatter input = ISODateTimeFormat.dateHourMinuteSecondMillis();
DateTimeFormatter output = DateTimeFormat.forPattern("mm/dd/yyyy kk:mm:ss.SSS");
String outputFormat = output.print( input.parseDate(inputFormat) );
0
Mark Tozzi

Entrez la date d'origine dans un objet Date , puis imprimez le résultat avec a DateFormat . Vous devrez peut-être scinder la chaîne en morceaux plus petits pour créer l'objet Date initial, si la méthode d'analyse automatique n'accepte pas votre format.

Pseudocode:

Date inputDate = convertYourInputIntoADateInWhateverWayYouPrefer(inputString);
DateFormat outputFormat = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss.SSS");
String outputString = outputFormat.format(inputDate);
0
Pops