2014-10-09 81 views
0

我有一組文本文件,一些長10k行,一些行包含格式日期;c#用epoche替換日期

'Fri Feb 3 16:49:18 2012' 

我該如何取代這個日期與時代?我努力通過正則表達式或任何其他方式在其餘的測試中識別它。

如一些線路的....

名稱:品牌-SLES址:(不可重定位)版本:11供應商: SUSE LINUX產品有限公司,紐倫堡,德國發布:三零年三月二十零日構建 日期:Fri Feb 3 16:49:18 2012安裝日期:Wed Sep 24 16:22:53 2014 構建主機:gubaidulina組:System/Fhs源RPM: branding-SLES-11-3.20.30.src.rpm

+0

「你用這個時代取代這個日期」是什麼意思? 「時代」是一個具體的參考日期。例如,「Unix Epoch」是1970年1月1日UTC。參見[本維基百科文章](http://en.wikipedia.org/wiki/Epoch_(reference_date))。你的意思是別的嗎? – 2014-10-09 17:02:33

+0

對不起,我的意思是用1970年以來的秒數代替。 – Fearghal 2014-10-09 17:04:52

回答

1

可能不完美,但開始

(Sun|Mon|Tue|Wed|Thu|Fri|Sat)[\s](Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[\s][1-31][\s][0-9]{2}:[0-9]{2}:[0-9]{2}[\s][0-9]{4} 

簡稱Regular Expression Matching a Valid Date

0

我想這會做部分時間,但Arvind的有一個更完整的解決方案。 thxs。

output = Regex.Replace(output, @"[0-2][0-9]:[0-5][0-9]:[0-5][0-9]", "", RegexOptions.None | RegexOptions.Multiline); 
+0

嗯,你的搜索字符串會在00-59的時候得到更多的有效時間。我忽略了,並假定時間可能包括單個數字,小時/分鐘/秒這樣使用[0-9] {2},但如果不是這種情況,它不應該是那麼你的時間字符串是好的。發佈您的最終版本。 – 2014-10-09 18:42:22

1

這是沒有必要與你自己的正則表達式。你可以寫這樣的方法:

public static long ParseAsUnixTimestampSeconds(String s) { 
    DateTime unixEpoch=new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); 
    var pattern="ddd MMM d HH:mm:ss yyyy"; 

    var dt=DateTime.ParseExact(
     s, pattern, CultureInfo.InvariantCulture, DateTimeStyles.None); 

    return (long)(dt-unixEpoch).TotalSeconds; 
} 

,只是把它叫做:

Debug.Print("{0}", ParseAsUnixTimestampSeconds("Fri Feb 3 16:49:18 2012")); 

爲了更好的設計,看看飛碟雙向先生的回答是:

Unix time conversions in C#

0

這可以用DateTime.ParseExact完成

String DateAsText = "Fri Feb 3 16:49:18 2012"; 
String Format = "ddd MMM d HH:mm:ss yyyy"; 
DateTime DateAsDateTime = DateTime.ParseExact(DateAsText, Format, null); 
TimeSpan timeSpan = (DateAsDateTime - new DateTime(1970, 1, 1, 0, 0, 0));