2014-10-09 58 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));