簡體   English   中英

在0000-00-00.01:00:00上解析時間跨度問題

[英]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 ,沒有針對yyyyMM 自定義時間跨度格式字符串 對於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM