2011-09-28 8 views
27

Chcę uzyskać format określonego ciągu daty.Jak uzyskać określony format ciągu znaków (wzór) w java?

Przykład: Mam ciąg znaków taki jak 2011-09-27T07:04:21.97-05:00, a format daty tego ciągu to yyyy-MM-dd'T'HH:mm:ss.SSS.

Tutaj chcę, aby dowiedzieć się ten format daty, kiedy przechodzą ciąg (2011-09-27T07:04:21.97-05:00) do metody, która zwróci format (yyyy-MM-dd'T'HH:mm:ss.SSS), a później będę sformatować terminie wskazanym ciąg według mojego wymogu (like yy-mm--dd or mm/dd/yyyy).

Czy ktoś może mi powiedzieć, jak mogę to osiągnąć?

+0

@Tomasz Nurkiewicz, nie, to nie. Jest to pytanie o konwersję daty z jednego formatu na inny. –

+7

Nie rozumiem, jak to pytanie w języku Java jest duplikatem (bardzo ogólnego) pytania JavaScript –

+0

lol..i zmarnowałem mój czas przewijając odpowiedź javascript na to pytanie .. Nie używaj ... nie duplikuj pytania..proszę odznacz duplikacja –

Odpowiedz

31
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) { 

       } 
      } 
     } 
    } 
} 
+0

Powyższe rozwiązanie na pewno zanalizuje datę, ale nie poda formatu daty. SimpleDateFormat to ToPattern i toLocalizedPattern poda dokładny format. –

+0

Jeśli ktoś używa tego rozwiązania, po prostu zwróć ciąg parse po wydrukowaniu wartości – Narasimha

0

Będziesz musiał wprowadzić ciąg początkowy daty i ukryć go w obiekcie daty i przekazać obiekt przekonwertowanej daty i sformatować go do wymaganego ciągu znaków.

3

Myślę, że powinieneś spróbować sparsować ciąg wejściowy z pewnymi predefiniowanymi wzorami. Ten, który działa, jest tym, którego potrzebujesz. Pamiętaj, że niektóre wzory są dość trudne.

01.12.12 to 01 grudnia 2012 r. W Europie, ale 12 stycznia 2012 r. W USA. Może to być również 12 grudnia 2001 roku.

6

można zrobić, jak ten sposób, nie wiem, czy nie dobry sposób, ale spróbuj tego

najpierw utworzyć obiekt SimpleDateFormat

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

teraz kiedy sprawdzić datę, jeśli to będzie analizować w ten Format następnie zmienić, jak na swoje formacie

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 
} 

zaktualizowany wpis:

Returning a date format from an unknown format of date string in java

How to convert String to Date without knowing the format?

Parse any date in Java

+0

Jak mogę określić format do SimpleDateFormat bez znajomości podanego formatu ciągu? – sathish

+0

sprawdź zaktualizowany post – Pratik

+0

jak mogę określić format do SimpleDateFormat jako "yyyy-mm-dd" T "HH: mm: ss.SSS" bez znajomości danego formatu ciągu? jeśli mój ciąg jest jak 2011-09-28 12:00:22 to jak powinienem parsować to z powyższym obiektem SimpleDateFormat? – sathish

2

Jeśli rozumiem zostanie poprawnie, chcesz analizować arbitralnych ciągi (czyli ciąg formatu nie wiesz) jak daty za pomocą DateFormat.parse()? Wtedy masz do czynienia z kwestiami takimi jak jak obsługiwać 01-02-03 (2 sty 2003? 1 lut 2003? Etc.)

Powinieneś wiedzieć przynajmniej coś o oczekiwanym formacie, jak wybór predefiniowanych formatów dla Twojego wkład.

0
HH:mm:ss.SSS => ([0-2]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(:)([0-5]{1,}[0-9]{1,})(.)([0-9]{1,3}) 

yyyy-mm-dd => ([0-9]{4})(-)([0-1]{1,}[0-9]{1,})(-)([0-3]{1,}[0-9]{1,}) 
+1

Jakie jest twoje pytanie? – cereallarceny

Powiązane problemy