2011-09-28 1 views
27

与えられた日付文字列のフォーマットを取得したい。Javaで指定された日付文字列形式(パターン)を取得するには?

例:2011-09-27T07:04:21.97-05:00のような文字列があり、この文字列の日付形式はyyyy-MM-dd'T'HH:mm:ss.SSSです。ここで

私はその後、私は私の要件(like yy-mm--dd or mm/dd/yyyy)によると、私の与えられた日付文字列をフォーマットします、私はフォーマット(yyyy-MM-dd'T'HH:mm:ss.SSS)を返しますメソッドに文字列(2011-09-27T07:04:21.97-05:00)を渡すときに、この日付フォーマットを知りたいです。

どのように達成することができますか?

+0

@Tomasz Nurkiewiczに日付と時刻の形式にすべての最もすべてのREG式を見つけることができます

は、いや、そうではありません。あるフォーマットから別のフォーマットへの日付変換の質問です。 –

+7

私はこのJavaの質問が(非常に一般的な)Javascriptの質問の複製であることを理解していません –

+0

LOL..iはこの時間の私の時間スクロールjavascriptの答えを無駄にします...その重複しない質問...二重性 –

答えて

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

上記の解決策では、日付は確実に解析されますが、日付形式は示されません。 SimpleDateFormatのtoPatternとtoLocalizedPatternは、正確なフォーマットを提供します。 –

+0

誰かがこのソリューションを使用している場合は、値を印刷した後に解析文字列を返すだけです – Narasimha

0

日付の文字列を日付オブジェクトに変換し、変換した日付オブジェクトを渡して、必要な文字列にフォーマットする必要があります。

3

入力文字列をいくつかの事前定義パターンで解析するようにしてください。働くものがあなたが必要とするものです。いくつかのパターンは非常に難しいことを忘れないでください。

01.12.12は2012年1月12日(ヨーロッパ)で2012年1月12日(米国)です。それは2001年12月12日かもしれない。あなたがこの方法のように行うことができます

6

、私はこれが、この中で解析する場合とき、日付を確認する最初の今のSimpleDateFormatオブジェクト

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

を作成するには、この

を試す良い方法を知っているか、いないいません

:フォーマットは、あなたのフォーマットに従って

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 
} 

更新のポストを変更します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

どのように指定した文字列形式を知っているSimpleDateFormatの形式を指定できますか? – sathish

+0

更新された投稿を確認してください – Pratik

+0

SimpleDateFormatのフォーマットを「yyyy-mm-dd 'T' HH:mm:ss.SSS」として指定するにはどうしたらいいですか?もし私の文字列が2011-09-28 12:00:22のようなものなら、私はSimpleDateFormatオブジェクトの上でこれをどのように解析すべきですか? – sathish

2

私が正しくあなたを理解していれば、あなたはDateFormat.parse()を使用して日付として任意の文字列(つまり、あなたが知っていない形式の文字列です)を解析したいですか?次に、あなたのためにいくつかの定義済みの形式の選択のように、あなたが期待されるフォーマットに関する少なくとも何かを知っている必要があります

01-02-03(2003年1月2日?2003年2月1日?など)をどのように扱うかのような問題に対処する必要が入力。

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

あなたの質問は何ですか? – cereallarceny

2

マドゥのコードでは、缶のエクササイズですが、すべての障害の場合は、例外が発生しますので、いくつかのパフォーマンスの問題が発生します。 私は、与えられた日付文字列のパターンの形を見つけるために、定規式の解を見つける必要があると思います。あなたは次のリンク

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

関連する問題