web-dev-qa-db-fra.com

Comment obtenir le format de chaîne de date donné (modèle) en Java?

Je veux obtenir le format d'une chaîne de date donnée.

Exemple: j'ai une chaîne comme 2011-09-27T07:04:21.97-05:00 et le format de date de cette chaîne est yyyy-MM-dd'T'HH:mm:ss.SSS.

Ici, je veux découvrir ce format de date lorsque je passe une chaîne (2011-09-27T07:04:21.97-05:00) vers une méthode qui retournera le format (yyyy-MM-dd'T'HH:mm:ss.SSS), puis plus tard, je formaterai ma chaîne de date donnée en fonction de mes besoins (like yy-mm--dd or mm/dd/yyyy).

Quelqu'un peut-il me dire comment l'obtenir?

36
sathish
import Java.text.ParseException;
import Java.text.SimpleDateFormat;
import Java.util.Date;
import Java.util.regex.Matcher;
import Java.util.regex.Pattern;

public class NewClass {

    private static final String[] formats = { 
                "yyyy-MM-dd'T'HH:mm:ss'Z'",   "yyyy-MM-dd'T'HH:mm:ssZ",
                "yyyy-MM-dd'T'HH:mm:ss",      "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",
                "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "yyyy-MM-dd HH:mm:ss", 
                "MM/dd/yyyy HH:mm:ss",        "MM/dd/yyyy'T'HH:mm:ss.SSS'Z'", 
                "MM/dd/yyyy'T'HH:mm:ss.SSSZ", "MM/dd/yyyy'T'HH:mm:ss.SSS", 
                "MM/dd/yyyy'T'HH:mm:ssZ",     "MM/dd/yyyy'T'HH:mm:ss", 
                "yyyy:MM:dd HH:mm:ss",        "yyyyMMdd", };

        /*
         * @param args
         */
    public static void main(String[] args) {
        String yyyyMMdd = "20110917";   
        parse(yyyyMMdd);
    }

    public static void parse(String d) {
        if (d != null) {
            for (String parse : formats) {
                SimpleDateFormat sdf = new SimpleDateFormat(parse);
                try {
                    sdf.parse(d);
                    System.out.println("Printing the value of " + parse);
                } catch (ParseException e) {

                }
            }
        }
    }
}
43
Madhu

vous pouvez faire comme ça, je ne sais pas bien ou pas mais essayez ceci

créez d'abord l'objet SimpleDateFormat

SimpleDateFormt sdf = new SimpleDateFormat("yyyy-MM-dd 'T' HH:mm:ss.SSS");

maintenant, vérifiez la date si cela va analyser dans ce format, puis changez selon votre format

try{
     Date date = sdf.parse(yourdate);
     sdf.applyPattern("yy-mm--dd or mm/dd/yyyy");
     String dateformat = sdf.format(date);
}catch(Exception ex) { // here forgot the exact exception class Parse exception was used
    // do something here
}

article mis à jour:

Retour d'un format de date à partir d'un format inconnu de chaîne de date en Java

Comment convertir une chaîne en date sans connaître le format?

Analyser n'importe quelle date en Java

6
Pratik

Je pense que vous devriez essayer d'analyser la chaîne d'entrée avec des modèles prédéfinis. Celui qui fonctionne est celui dont vous avez besoin. N'oubliez pas que certains modèles sont assez délicats.

Le 01.12.12 est le 01 décembre 2012 en Europe mais le 12 janvier 2012 aux USA. Ce pourrait également être le 12 décembre 2001.

3
Piotr Gwiazda

Le code de Madhu est peut s'entraîner, mais certains problèmes de performances se poseront car chaque cas d'échec déclenchera l'exception. Je pense que nous devons trouver la solution d'expression du régulateur pour trouver le motif de la chaîne de date donnée.

vous pouvez trouver toutes les expressions reg au format date et heure dans le lien suivant

http://regexlib.com/DisplayPatterns.aspx?cattabindex=4&categoryId=5&AspxAutoDetectCookieSupport=1

2
Ravi

Si je vous comprends bien, vous voulez analyser arbitraire des chaînes (c'est-à-dire une chaîne d'un format que vous ne connaissez pas) en tant que dates en utilisant DateFormat.parse()? Ensuite, vous devez gérer des problèmes tels que la gestion de 01-02-03 (2 janvier 2003? 1er février 2003? Etc.)

Vous devez connaître au moins quelque chose sur le format attendu, comme un choix de plusieurs formats prédéfinis pour votre entrée.

2
michael667

Vous devrez prendre la chaîne de date initiale et la convertir en objet de date, transmettre cet objet de date converti et le formater à la chaîne requise.

0
Buhake Sindi