0

サーバーに膨大なデータセットが保存されており、さまざまな行に20以上の異なる形式の日付が含まれています。それらを 1 つの一般的な形式に変換したいと考えています。どうすればそれを達成できますか?形式ごとに個別の関数を記述する必要がありますか、それとも任意の形式の日付を読み取って特定の形式に変換できるスーパー関数がありますか。

4

3 に答える 3

1

Perl では、Date::Parse モジュールが、任意の文字列から使用可能な日付情報を抽出するという非常に見事な仕事をします。

doco から ( http://metacpan.org/pod/Date::Parse ) :

以下は、Date::Parse で解析できることが知られている日付のサンプル リストです。

 1995:01:24T09:08:17.1823213           ISO-8601
 1995-01-24T09:08:17.1823213
 Wed, 16 Jun 94 07:29:35 CST           Comma and day name are optional 
 Thu, 13 Oct 94 10:13:13 -0700
 Wed, 9 Nov 1994 09:50:32 -0500 (EST)  Text in ()'s will be ignored.
 21 dec 17:05                          Will be parsed in the current time zone
 21-dec 17:05
 21/dec 17:05
 21/dec/93 17:05
 1999 10:02:18 "GMT"
 16 Nov 94 22:28:20 PST 
于 2013-09-16T09:39:03.030 に答える
0

はい、Java では単純な dateFormatter にハードコーディングされたフォーマットを定義して使用する必要があります。これで、すべての形式を 1 つのコードに収めるオプションがいくつかあります。

  1. 次のように、各形式を保存できる構成可能なプロパティ/CSV ファイルを作成します。
oldFormat1;newFormat1
oldFormat2;newFormat2
oldFormat3;newFormat3
oldFormat4;newFormat4
oldFormat5;newFormat5

(あなたの場合、新しいフォーマットはすべて同じになります)

  1. java プログラムからプロパティ ファイルを読み取り、これらの結果を変数に取得します。たとえばMap<String><String>、上記のペアをキーと値として保持します。

  2. SimpleDateFormat#formatを使用して日付をフォーマットします

    DateFormat originalFormat = new SimpleDateFormat(old_format, Locale.ENGLISH);
    DateFormat targetFormat = new SimpleDateFormat(new_format);
    Date date = originalFormat.parse("August 21, 2012"); // parse date from database, where date format is MMMM dd, yyyy
    String formattedDate = targetFormat.format(date);  // 20120821
    

これらの手順で要件が満たされることを願っています。

于 2013-09-16T04:30:36.447 に答える