-1

FTP ファイル リストから取得したファイル名 (文字列) から非常に奇妙な形式で保存されている日付と時刻の文字列を抽出する最善の方法を見つけようとしています。

文字列は次のとおりです。

-rwxr-xr-x    1 ftp      ftp        267662 Jun 06 09:13 VendorInventory_20130606_021303.txt\r

抽出しようとしている特定のデータは20130606_021303. 021303時間、秒、およびミリ秒としてフォーマットされます。DateTime.Parse と DateTime.ParseExact は協力しません。これを起動して実行する方法について何か考えはありますか?

4

3 に答える 3

1

更新FTP リストのファイル表示には固定構造があると想定しているため、単純に使用String.Substringして日時文字列を抽出し、次のように解析できDateTime.ParseExactます。

var s = "-rwxr-xr-x    1 ftp      ftp        267662 Jun 06 09:13 VendorInventory_20130606_021303.txt\r";
var datetime = DateTime.ParseExact(s.Substring(72,15),"yyyyMMddHHmmss",null);


元の回答

正規表現を使用します。次のことを試してください。

var s = "-rwxr-xr-x    1 ftp      ftp        267662 Jun 06 09:13 VendorInventory_20130606_021303.txt\r";

/* 
   The following pattern means:
   \d{8})    8 digits (\d), captured in a group (the parentheses) for later reference
   _          an underscore
   (\d{6})    6 digits in a group
   \.         a period. The backslash is needed because . has special meaning in regular expressions
   .*         any character (.), any number of times (*)
   \r         carriage return
   $          the end of the string
*/
var pattern = @"(\d{8})_(\d{6})\..*\r$";

var match = Regex.Match(s, pattern);
string dateString = matches.Groups[1].Value;
string timeString = matches.Groups[2].Value;

を使用して解析しParseExactます:

var datetime = DateTime.ParseExact(dateString + timeString,"yyyyMMddHHmmss",null);
于 2013-06-27T22:59:08.900 に答える
0

これはうまくいくかもしれません:

string s = "-rwxr-xr-x 1 ftp ftp 267662 Jun 06 09:13 VendorInventory_20130606_021303.txt\r";

// you might need to adjust the IndexOf method a bit - if the filename/string ever changes...
// or use a regex to check if there's a date in the given string 

// however - the first thing to do is extract the dateTimeString:
string dateTimeString = s.Substring(s.IndexOf("_") + 1, 15);

// and now extract the DateTime (you could also use DateTime.TryParseExact)
// this should save you the trouble of substringing and parsing loads of ints manually :)
DateTime dt = DateTime.ParseExact(dateTimeString, "yyyyMMdd_hhmmss", null);
于 2013-06-27T23:40:40.423 に答える