web-dev-qa-db-ja.com

Javaで指定された日付文字列形式(パターン)を取得する方法は?

特定の日付文字列の形式を取得したい。

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

ここで、string(2011-09-27T07:04:21.97-05:00)をformat(yyyy-MM-dd'T'HH:mm:ss.SSS)を返すメソッドに渡すときにこの日付形式を見つけ、その後、要件に従って指定された日付文字列をフォーマットします( like yy-mm--dd or mm/dd/yyyy)。

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

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

あなたはこの方法で好きなことができます、私は良い方法がわからないが

最初に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
}

更新された投稿:

Javaの日付文字列の不明な形式から日付形式を返す

形式を知らずに文字列を日付に変換する方法?

Javaで日付を解析する

6
Pratik

事前定義されたパターンで入力文字列を解析する必要があると思います。動作するのは必要なものです。いくつかのパターンは非常にトリッキーであることを忘れないでください。

01.12.12は、ヨーロッパでは2012年12月1日ですが、アメリカでは2012年1月12日です。 2001年12月12日にもなります。

3
Piotr Gwiazda

Madhuのコードは問題なく動作しますが、すべての障害が例外を発生させるため、パフォーマンスの問題が発生します。与えられた日付文字列からパターンを見つけるために、レギュラー式ソリューションを見つける必要があると思います。

次のリンクで、日付と時刻の形式のほとんどすべての正規表現を見つけることができます

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

2
Ravi

正しく理解できたら、DateFormat.parse()?を使用して任意文字列(つまり、知らない形式の文字列)を日付として解析します。その後、01-02-03(2003年1月2日?2003年2月1日?など)の処理方法などの問題に対処する必要があります。

少なくともsomethingは、入力用に事前定義されたいくつかの形式の選択のように、期待される形式について知っている必要があります。

2
michael667

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

0
Buhake Sindi