【问题标题】:How to convert timezone offset text "+01:00" to timespan如何将时区偏移文本“+01:00”转换为时间跨度
【发布时间】:2019-12-23 05:22:10
【问题描述】:

我有一个 API 可以接受时区偏移作为字符串。我需要将时区转换为 TimeSpan 并将时间跨度添加到我拥有的 UTC 数据中。这是我正在尝试的。

private bool TryGetHrAndMinFromTimeZone(string timeZone, out TimeSpan result)
    {
        try
        {
            var isPositive = !timeZone.StartsWith("-");
            var hrAndMin = string.Concat(timeZone.Where(x => x != '-' && x != '+')).Split(':');
            var hr = int.Parse(hrAndMin[0]);
            var min = int.Parse(hrAndMin[1]);
            result = isPositive ? new TimeSpan(hr, min, 0) : new TimeSpan(-hr, -min, 0);
            return true;
        }
        catch (Exception)
        {
            throw new Exception(string.Format("Provided TimeZone '{0}' is Invalid ", timeZone));
        }
    }

有没有更好的选择?

【问题讨论】:

  • 嘿,试试这个 --> TimeSpan.TryParse("-07:00", out TimeSpan ts)

标签: c# timezone timespan


【解决方案1】:

你可以试试

TimeSpan.TryParse("-07:00", out TimeSpan ts) //for -07:00
TimeSpan.TryParse("07:00", out TimeSpan ts) //for +07:00

更多信息https://docs.microsoft.com/en-us/dotnet/standard/datetime/converting-between-time-zones#converting-datetimeoffset-values

【讨论】:

  • 感谢您的意见。它与 -ve 时区偏移很好地配合使用。但不适用于 +ve 时区偏移。您能对此提供意见吗?
  • @AkbarBadhusha 从字符串中删除加号(+)。
【解决方案2】:

DateTimeOffset 类型可以使用 zzz 说明符解析这种格式的偏移量。因此,您可以编写如下函数:

static TimeSpan ParseOffset(string s)
{
    return DateTimeOffset.ParseExact(s, "zzz", CultureInfo.InvariantCulture).Offset;
}

另一种方法,你可以用TimeSpan.ParseExact解析,如果你先去掉标志并自己处理:

static TimeSpan ParseOffset(string s)
{
    var ts = TimeSpan.ParseExact(s.Substring(1), @"hh\:mm", CultureInfo.InvariantCulture);
    return s[0] == '-' ? ts.Negate() : ts;
}

或者,正如 Manish 在他的回答中显示的那样,您可以让 TimeSpan.Parse 尝试找出字符串。如果您先删除 + 符号,它会起作用。

static TimeSpan ParseOffset(string s)
{
    return TimeSpan.Parse(s.Replace("+", ""), CultureInfo.InvariantCulture);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-17
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多