我正在try 将时区字符串(如"+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"转换为TimeSpan?

推荐答案

您可以为ParseExact呼叫提供多种格式.例如,g处理-02:00情况,并使用转义处理+02:00@"\+hh\:mm":

var values = new []
{
  ("-02:00", TimeSpan.FromHours(-2)), 
  ("+02:00", TimeSpan.FromHours(2))
};

foreach (var (value, expected) in values)
{
    var actual = TimeSpan.ParseExact(value, 
        new [] { @"\+hh\:mm", "g" },
        CultureInfo.InvariantCulture);
    
    Debug.Assert(actual == expected);
}

另见:

Csharp相关问答推荐

如何从顶部提取发票号作为单词发票后的第一个匹配

Dapper是否可以自动扩展类成员

禁用AutoSuggestBox项目更改时的动画?

图形.DrawString奇怪异常的字距调整

C#类主构造函数中的调试参数

Blazor:类型或命名空间名称Components在命名空间中不存在''

使用yaml将Azure函数代码部署到FunctionApp插槽时出现问题(zip未找到)

通过EFCore上传大量数据.

只有第一个LINQ.Count()语句有效

如果设置了另一个属性,则Newtonsoft JSON忽略属性

我可以查看我们向应用程序洞察发送了多少数据吗?

Foreach非常慢的C#

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

具有嵌套属性的IGGroup

在ObservableCollection上使用[NotifyPropertyChangedFor()]源代码生成器不会更新UI

在C#和HttpClient中使用REST API

使用免费的DotNet库从Azure函数向Azure文件共享上的现有Excel文件追加行

.NET文档对继承的困惑

无法通过服务控制台启动.NET Core 6.0服务(错误1053)

部署Aspnet Blazor服务器时出现未处理的Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]异常