c#将日期替换为划时代

本文关键字:划时代 替换 日期 | 更新日期: 2023-09-27 18:26:02

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

'Fri Feb 3 16:49:18 2012'

如何用历元替换此日期?我很难通过regex或任何其他方式在测试的其余部分中识别它。

例如某些线路。。。。

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

c#将日期替换为划时代

可能并不完美,但可以启动

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

引用的正则表达式匹配有效日期

没有必要自己使用regex。你可以写一个这样的方法:

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

C#中的Unix时间转换

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

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

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