3

日付をある入力文字列形式から別の形式に変換する必要がある Java メソッドがあります。入力と出力の形式は、すべてのミリ秒単位の詳細を保持する必要があります。これは、タイムスタンプがミリ秒間隔であることが多いプロセス追跡ソリューション用であるためです。

SimpleDateFormat はすべてのミリ秒データを失い、秒とミリ秒の乱数を返すだけのようです。

入力日付文字列: "05/23/2013 12:32:13.45133" 入力日付形式: "MM/dd/yyyy HH:mm:ss.SSSSS" 出力日付形式: "yyyyMMddHHmmssSSS"

上記の入力日付と形式を考えると、結果の日付文字列は 20130523123258133 になります。これは明らかに、入力秒数から完全にずれています。

入力形式は異なる場合がありますが、出力形式は常に同じでなければなりません。

以下は現在の方法です。

private long dateSequencer(String inputDt, String inputFormat) {
    long result = 0;
    try {
        // Convert input date into yyyyMMddHHmmssSSS format for sequencing
        SimpleDateFormat dtFrmt = new SimpleDateFormat(inputFormat);
        Date dt = new Date();
        dt = dtFrmt.parse(inputDt);
        // input String converted to Date, now reformat to Long
        dtFrmt = new SimpleDateFormat("yyyyMMddHHmmssSSS");
        String reFrmt = dtFrmt.format(dt);
        result = Long.parseLong(reFrmt);
    } catch (Exception ex) {
        System.out.println("++++ Exception converting dateSequencer: " + ex.toString());
    }
    System.out.print("+++ABM dateSeq: [inputDt=" + inputDt + "] [inputFormat=" + inputFormat + "] [result=" + result +"]");
    return result;
}

ランタイムからのログ ファイル エントリ:

+++ABM dateSeq: [inputDt=05/23/2013 12:32:13.45133] [inputFormat=MM/dd/yyyy HH:mm:ss.SSSSS] [result=20130523123258133]

入力形式は変更される可能性があるため、入力文字列を手動で解析して特定のパターンに依存することはできません。これが、パターンを渡すことを許可し、SimpleDateFormat を使用して Date に変換してから String に戻す理由です。

どうすれば確実にこれを行うことができますか?指定された入力日付文字列を標準形式に変換するより効率的な方法はありますか?

ありがとう!

4

3 に答える 3

0

入力日付文字列: "05/23/2013 12:32:13.45133" には、5 桁のミリ秒が含まれています。そしてそれは不可能です... 3桁でなければなりません。したがって、45133 ミリ秒は 45 秒と 133 ミリ秒に相当します。入力日付文字列は日付「05/23/2013 12:32:58.133」です

于 2013-05-24T18:39:58.933 に答える
0

いずれの場合も、月、日、分、秒が 2 桁、年が 4 桁、ミリ秒が3桁であり、パターンが異なるだけであると仮定できる場合は、次のように簡単に実行できます。

public static long convert(String inputDt, String inputFormat) {
    int dd = inputFormat.indexOf("dd");
    int MM = inputFormat.indexOf("MM");
    int yyyy = inputFormat.indexOf("yyyy");
    int HH = inputFormat.indexOf("HH");
    int mm = inputFormat.indexOf("mm");
    int ss = inputFormat.indexOf("ss");
    int SSS = inputFormat.indexOf("SSS");
    return Long.valueOf(inputDt.substring(yyyy,yyyy+4) + inputDt.substring(MM, MM+2) + inputDt.substring(dd, dd+2) + inputDt.substring(HH, HH+2)
            + inputDt.substring(mm, mm+2) + inputDt.substring(ss, ss+2) + inputDt.substring(SSS,SSS+3));        
}

convert("05/23/2013 12:32:13.133", "MM/dd/yyyy HH:mm:ss.SSS") yields 20130523123213133
于 2013-05-23T22:05:37.267 に答える