Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#用epoche替换日期_C#_Datetime_Replace - Fatal编程技术网

c#用epoche替换日期

c#用epoche替换日期,c#,datetime,replace,C#,Datetime,Replace,我有一套文本文件,有些长达10万行,有些行包含格式日期 'Fri Feb 3 16:49:18 2012' 我如何用纪元替换这个日期?我很难通过regex或任何其他方式在剩下的测试中认出它 如某些行 名称:品牌SLES重新定位:(不可重新定位)版本:11供应商: SUSE LINUX Products GmbH,德国纽伦堡发布:3.20.30版本 日期:2012年2月3日星期五16:49:18安装日期:2014年9月24日星期三16:22:53 构建主机:gubaidulina组:系统/Fhs

我有一套文本文件,有些长达10万行,有些行包含格式日期

'Fri Feb 3 16:49:18 2012'
我如何用纪元替换这个日期?我很难通过regex或任何其他方式在剩下的测试中认出它

如某些行

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


也许不是完美的,但要开始

(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}

参考

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

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

没有必要自己用正则表达式来做。您可以编写如下方法:

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先生的答案:


这可以通过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));

你说的“用纪元代替这个日期”到底是什么意思?“纪元”是一个特定的参考日期。例如,“Unix时代”是1970年1月1日UTC。看见你是说别的吗?对不起,我是说从1970年起用秒替换。嗯,你的搜索字符串的有效时间是00-59。我忽略了时间,并假设时间可以包括小时/分钟/秒的一位数,所以使用[0-9]{2},但如果不是这样,也不应该是这样,那么您的时间字符串是好的。发布你的最终版本。