Parse timespan issue on 0000-00-00.01:00:00
我在分析时间跨度时遇到问题,我有一个数据集的开始时间和结束时间,并且步骤的格式是这样的
问题是这样的一条线
1 2 | const string TimeSpanFormat = @"yyyy-MM-dd\.hh\:mm\:ss"; TimeSpan.ParseExact(StepToConvert, TimeSpanFormat, CultureInfo.InvariantCulture) |
或者像这样
1 | DateTime.ParseExact(StepToConvert, TimeSpanFormat, CultureInfo.InvariantCulture).TimeOfDay |
号
返回两个错误
Additional information: The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.
号
所以我有点茫然,除了创建一个助手类/结构。在datetime btw的EDOCX1[1]这样的时间工作很好。
社区对此有什么好主意吗?
对于
对于
1 2 3 | string s ="2013-01-01.00:00:00"; const string format ="yyyy-MM-dd.HH:mm:ss"; DateTime.ParseExact(s, format, CultureInfo.InvariantCulture).TimeOfDay // 00:00:00 |
这与日期无关,因此您可以使用"银行"方法,在30天和360天内计算月份和年份,或者最适合的方法(如果需要的话)。
然后进行自定义拆分和计算并添加片段:
1 2 3 4 5 6 7 8 9 10 11 | string step ="0001-02-03.01:00:00"; string[] parts = step.Split(new string[] {"-","."}, StringSplitOptions.None); TimeSpan hours = TimeSpan.Parse(parts[3]); TimeSpan days = new TimeSpan(int.Parse(parts[2]), 0, 0, 0); TimeSpan months = new TimeSpan(int.Parse(parts[1]) * 30, 0, 0, 0); TimeSpan years = new TimeSpan(int.Parse(parts[0]) * 360, 0, 0, 0); TimeSpan total = hours.Add(days).Add(months).Add(years); Console.WriteLine(total.ToString()); |
号
示例的结果是423.04:00:00。