[英]Parse timespan issue on 0000-00-00.01:00:00
我在解析時間跨度時遇到問題,我有一個數據集的開始和結束時間,並且步驟的格式像這樣0000-00-00.01:00:00
所以在這種情況下,它之間只有一個小時的時間。 但可能需要幾天的時間,因此必須保持一定的支持。
問題是這樣的線
const string TimeSpanFormat = @"yyyy-MM-dd\.hh\:mm\:ss";
TimeSpan.ParseExact(StepToConvert, TimeSpanFormat, CultureInfo.InvariantCulture)
或像這樣
DateTime.ParseExact(StepToConvert, TimeSpanFormat, CultureInfo.InvariantCulture).TimeOfDay
同時返回錯誤
附加信息:日歷System.Globalization.GregorianCalendar不支持由字符串表示的DateTime。
所以我有點無所適從,除了制作一個助手類/結構。 在類似Datetime btw的2013-01-01.00:00:00
上可以正常工作。
社區中有什么聰明的主意嗎?
對於TimeSpan.ParseExact
,沒有針對yyyy
和MM
自定義時間跨度格式字符串 。 對於TimeSpan
這些是有問題的主題。 這只是一個時間間隔。 一個月或一年的持續時間取決於很多東西。
對於DateTime.ParseExact
,首先,您的0000-00-00.01:00:00
小於DateTime.MinValue
。 您不能解析作為DateTime
不存在的字符串。 即使你的字符串是可用的DateTime
價值,你的字符串和您的格式不匹配的 。 對於像2013-01-01.00:00:00
這樣的字符串,您的TimeSpanFormat
應該為yyyy-MM-dd.HH:mm:ss
,最好是IFormatProvider
具有:
作為TimeSeparator
。
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天的月份和年份-或最合適的日期(如果需要的話)。
然后進行自定義拆分和計算並添加片段:
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.