【问题标题】:Find dates and change format in C#在 C# 中查找日期和更改格式
【发布时间】:2017-03-07 19:06:57
【问题描述】:

我有一个包含不同数据的文本文件。现在我需要替换文件中的多个内容,然后才能正确使用数据。我用正则表达式替换了文本。但现在我需要更改日期。但我不知道该怎么做。

日期如下所示:"utc": "2017-10-02 19:55:00.205263000 Z" 我想得到这个日期格式的所有出现的结果: "utc": "2017-10-02 19:55:00"

我尝试使用以下代码:

string pattern = @"{0:yyyy-mm-dd hh:mm:ss.fff Z}";
string replacement = "{0:yyyy-mm-dd hh:mm:ss";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(theInputTextFile, replacement);

日期格式不能与正则表达式一起使用吗?还是我的代码有误?

I used the information from here, for the date formats

【问题讨论】:

  • 您怀疑 RegEx 引擎不知道 d/m/y 等是日期/时间指标 - 它们仅用于格式化。天真地 \d{4}-\d{2} 匹配 4digits-2digits ... 对于完全严格匹配,TryParseExact() 然后重新格式化。

标签: c# regex date


【解决方案1】:

实际上你可以给 Regex.Replace 方法一个委托,这样你就可以转换它的格式。 检查此页面中的示例: https://msdn.microsoft.com/en-us/library/cft8645c(v=vs.110).aspx

下面是一个代码示例,它会查找按照您在问题中所写格式并替换为新格式的日期:

class Program
{
    static void Main()
    {
        string text = " dasd arew 2017-03-11 12:25:56.345 Z 2017-03-11 12:25:56.345 Z das tfgwe 2017-03-11 12:25:56.345 Z";
        string pattern = @"\d{4}\-\d{2}\-\d{2}\s\d{2}\:\d{2}\:\d{2}\.\d{3}\sZ";
        Regex r = new Regex(pattern);
        var res = r.Replace(text, new MatchEvaluator(ConvertDateFormat));
        Console.WriteLine(res);
    }

    static string ConvertDateFormat(Match m)
    {
        var mydate = DateTime.Parse(m.Value);
        return mydate.ToString("yyyy-MM-dd hh:mm:ss");
    }

}

【讨论】:

  • 这假设您已经正确匹配开始。
  • @MattJohnson 你是对的。我是这么认为的。我现在将正确的正则表达式模式添加到我的代码示例中
【解决方案2】:

日期格式不能用正则表达式吗

正确。这不可能。正则表达式和日期格式/解析标记是两个不相关的概念。您需要匹配特定的文本。日期解析器的内部可能使用正则表达式来实现这样的目标,但不能简单地将yyyy 传递给Regex 类并期望它找到2017。为此,您必须使用 \d{4} 之类的东西,它会捕获任意四个连续数字。

另请注意,日期格式标记区分大小写,并且您将分钟 (mm) 与月份 (MM) 混为一谈,并使用 12 小时制 (hh) 而不是 24 小时制 ( HH) 没有 am/pm 指示符 (tt) - 无论如何,这并不重要,因为你传入了一个正则表达式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2018-12-06
    • 1970-01-01
    • 2012-07-02
    相关资源
    最近更新 更多