代码之家  ›  专栏  ›  技术社区  ›  Varun Sharma

如何从C中的字符串格式化DateTime/TimeSpan#

  •  0
  • Varun Sharma  · 技术社区  · 7 年前

    现在我可以使用if:D来处理这个问题。所以每当第二个令牌小于第一个令牌时(例如“7:00am-02:00am”),我就可以增加第二部分的日期。

    string input = "7:00 am - 12:00 am";
    List<DateTime> tokens = input.Split('-').Select(x => DateTime.Parse(x.Trim(), CultureInfo.GetCultureInfo("en-NZ"))).ToList();
    if(tokens[1] < tokens[0]){
        tokens[1] = tokens[1].AddDays(1);   
    }
    

    enter image description here

    但我想知道是否有任何内置的方式在C本身通过时间跨度,日期时间类等来处理它。

    1 回复  |  直到 7 年前
        1
  •  3
  •   trashr0x Pac0    7 年前

    代码可以满足您列出的需求,您可以考虑通过创建扩展方法并使用 DateTime.Hour 在您的if声明中:

    public static class StringExtensions
    {
        public static IEnumerable<DateTime> ToDateTimePairs(this string input)
        {
            var dates = input.Split('-').Select(x => DateTime.Parse(x.Trim(), CultureInfo.GetCultureInfo("en-NZ"))).ToList();           
    
            if (dates[1].Hour < dates[0].Hour)
            {
                dates[1] = dates[1].AddDays(1);
            }
    
            return dates;
        }
    }
    

    string input = "7:00 am - 12:00 am";
    var dates = input.ToDateTimePairs();
    foreach(var date in dates)
    {
        Console.WriteLine(date);
    }
    Console.ReadKey();
    

    ToDateTimePairs() (您应该只有两个有效的 DateTime 分割字符串后的对象等)。实现它的方式取决于您;现在,如果字符串中包含无效日期,则调用 DateTime.Parse() 将抛出一个 FormatException DateTime.TryParse() 相反。