有没有办法将“+02:00”转换为时间跨度?

问题描述 投票:0回答:1

我正在尝试将“+02:00”和“-01:00”等时区字符串转换为 TimeSpan。我找不到在格式字符串中包含 - 或 + 符号的方法。 https://learn.microsoft.com/en-us/dotnet/standard/base-types/standard-timespan-format-strings

[TestMethod()]
public void ShouldParseTimeZoneStringToTimeSpan() 
{
    var value = "+02:00";
    var actual = 
        //TimeSpan.Parse(value);
        //DateTime.Parse(value).TimeOfDay;
        TimeSpan.ParseExact(value, "hh:mm", CultureInfo.InvariantCulture);

    var expected = TimeSpan.FromHours(2);
    Assert.AreEqual(expected, actual);
}

有没有一种优雅的方法将“+02:00”或“-02:00”转换为时间跨度?

c# timespan
1个回答
0
投票

TimeSpan
表示时间间隔,因此如果完全删除 - 或 + 符号,就失去了使用 TimeSpan 的全部意义。

其中一种默认格式类型“g”实际上允许“-”号表示负时间间隔,但不允许“+”,因此您只需替换字符串中的“+”即可。

    [Fact]
    public void PositiveInterval()
    {
        string intervalString = "+02:00";
        var format = "g";
        var culture = CultureInfo.InvariantCulture;

        TimeSpan.TryParseExact(intervalString.Replace("+", ""), format,
                                                          culture, TimeSpanStyles.None, out var result);

        Assert.NotEqual(TimeSpan.Zero, result);
        var expected = TimeSpan.FromHours(2);
        Assert.Equal(expected, result);
    }

    [Fact]
    public void NegativeInterval()
    {
        string intervalString = "-02:00";
        var format = "g";
        var culture = CultureInfo.InvariantCulture;

        TimeSpan.TryParseExact(intervalString.Replace("+", ""), format,
                                                          culture, TimeSpanStyles.None, out var result);

        Assert.NotEqual(TimeSpan.Zero, result);
        var expected = TimeSpan.FromHours(-2);
        Assert.Equal(expected, result);
    }
© www.soinside.com 2019 - 2024. All rights reserved.