+/-登录TimeSpan的ParseExact()?

Lee*_*ite 3 c# parsing timespan

我需要解析一个指定环境时区的字符串.它看起来像+0100或-0530指定与UTC时区的偏移量.

在这些字符串中,加号/减号始终存在.我想用这个TimeSpan.ParseExact()方法解析它,我很确定有一种方法.该Parse()方法知道如何处理减号,但该ParseExact()方法的文档没有提到任何关于标志的内容.

到目前为止,我正在使用的格式是hhmm,但这需要以处理+/-符号的内容为前缀.有谁能指出我正确的方向?

Tim*_*ter 5

您可以检查它是否以-,然后应用适当的格式字符串:

string[] timespans = { "-0530", "+0100" };
foreach (string timespan in timespans)
{
    bool isNegative = timespan.StartsWith("-");
    string format = isNegative ? "\\-hhmm" : "\\+hhmm";
    TimeSpanStyles tss = isNegative ? TimeSpanStyles.AssumeNegative : TimeSpanStyles.None;
    TimeSpan ts;
    if (TimeSpan.TryParseExact(timespan, format, null, tss, out ts))
    {
        Console.WriteLine("{0} successfully parsed to: {1}", timespan, ts);
    }
    else
    {
        Console.WriteLine("Could not be parsed: {0}", timespan);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我用TimeSpanStyles.AssumeNegative的TryParseExact,否则,时间跨度是,即使他们以负号前缀始终为正.