c#用epoche替换日期

时间:2014-10-09 16:06:44

标签: c# datetime replace

我有一组文本文件,一些长10k行,有些行包含格式日期;

'Fri Feb 3 16:49:18 2012'

如何用纪元取代这个日期?我正在努力通过正则表达式或任何其他方式在其余的测试中识别它。

例如某些线......

  

名称:branding-SLES重定位:(不可重定位)版本:11供应商:   SUSE LINUX Products GmbH,纽伦堡,德国发布:3.20.30 Build   日期:2012年2月3日星期五16:49:18安装日期:2014年9月24日星期三16:22:53   Build Host:gubaidulina Group:System / Fhs Source RPM:   品牌-SLES-11-3.20.30.src.rpm

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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"));

为了更好的设计,请看看Skeet先生的回答:

Unix time conversions in C#

答案 2 :(得分:0)

我认为这会做时间的一部分,但Arvind有一个更完整的解决方案。 thxs。

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

答案 3 :(得分: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));