代码之家  ›  专栏  ›  技术社区  ›  burnside

日期时间转换regex c#

  •  0
  • burnside  · 技术社区  · 15 年前

    我继承了一个代码库,其中到处都是像这样创建的日期时间对象:

    DateTime d = Convert.ToDateTime("2008-02-05");
    

    由于字符串的区域性,在NY服务器上运行测试时失败。我希望将它们转换为更合理的格式:

    DateTime d = new DateTime(2008,02,05);
    

    我已经编写了一个Vs宏,一次转换一个,但我想知道是否有人可以帮助我编写一个regex,这样我就可以找到并批量替换它们了?

    3 回复  |  直到 15 年前
        1
  •  2
  •   Willem van Rumpt    15 年前

    假设它们的格式相同(即括号和/或其他位置之间没有其他空格),则搜索:

    Convert\.ToDateTime\("(?<year>[0-9]{4})-(?<month>[0-9]{2})-(?<day>[0-9]{2})"\);
    

    替换为:

     new DateTime(${year}, ${month}, ${day});
    

    请注意,这无论如何都不会考虑语句的上下文。 它是火和忘记,取代任何地方,任何上下文中的任何和每一个发生。

        2
  •  0
  •   adopilot    15 年前

    是否尝试使用子字符串而不是regex

    string dateString = "2008-07-26"
    string.Format("{0}-{1}-{2}",dateString.Substring(0,4),dateString.Substring(5,2),dateString.Substring(8,2));
    
        3
  •  0
  •   burnside    15 年前

    在对神秘vs find/replace regex命令进行了一些研究之后,这并不难,而且Willem的回答也有很大的帮助。我得到:

    //find
    Convert\.ToDateTime\(\"{[0-9]^4}-{[0-9]+}-{[0-9]+}\"\)
    
    //replace
    new DateTime(\1, \2, \3)