1

ファイル名には常に日付が埋め込まれていると仮定しますが、均一ではないと仮定すると、そのようなファイルを解析して一貫してファイル名を DateTime に変換する方法はありますか?

より具体的には、ファイル名が次のように常に同じ形式である場合:

「NNNNN.YYYY-MM-DD.log」

...これはとても簡単です。

ただし、ファイル名が次のいずれかの形式である場合:

「NNN.YYYY-MM-DD.log」または「NNNNN.YYYY-MM-DD.txt」または「NNNNNNN.YYYY-MM-DD.bunyan」-そしておそらく「NNNNN.MM-DD-YYYY. xlw" -and: "NNNNN.YYYY-DD-MM.zsj"

-- IOW、ファイル名には常に何らかの形で表された日付が含まれていますが、それ以外の場合、すべての賭けはオフです。希望はありますか、それともいいえですか?

4

4 に答える 4

3

いいえ、拡張機能を既知の形式に一致させることができない限り、望みはありません。

2012 年 12 月 31 日のように、日と月の組み合わせによっては幸運に恵まれるでしょう。明らかに、31 は月の値ではなく、少なくとも日/月/4 桁の年の組み合わせを推測できます。

Alexei が述べたように、2 桁の年は問題をさらに複雑にします。

補足として、これは SQL Server の問題とよく似ています。これは、異なる日時形式の想定で実行されるまでは、問題なくダンディです。

SELECT CAST('2012-05-01' AS DATETIME)

ロケールに応じて、これは 2012 年 5 月 1 日または 2012 年 1 月 5 日になる可能性があります

于 2012-06-01T23:43:05.480 に答える
2

いいえ、YYYY-DD-MM と YYYY-MM-DD のペアまたは 2 桁の年を許可する場合はできません。

10-11-12 (YY-DD-MM, DD-MM-YY,....) とは?

于 2012-06-01T23:43:13.063 に答える
1

文字列を分割し-、リストをループします。3 つの連続した数字が表示された場合は、ヒットの可能性があります。次に、これらの数値を解析して日付を取得します。すべてをキャッチするわけではありませんが、ほとんどをキャッチします。

于 2012-06-01T23:41:35.300 に答える
1

私が思うところにたどり着くには、いくつかの仮定を立てる必要があります。すべての例は NNN.SOMEDATEFORMAT.EXTENSION の形式です。DateTime.Parse は、ほとんどの (すべて?) 有効な日付/時刻形式を処理するのに十分賢いです。これを試して;

string path = "123.2001-01-01.log";
string filename = Path.GetFileNameWithoutExtension(path);
int indexFirstSeparator = filename.IndexOf('.') + 1;
string datepart = filename.Substring(indexFirstSeparator);
DateTime dt = DateTime.Parse(datepart);
于 2012-06-01T23:45:53.560 に答える