我正在尝试将“+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
表示时间间隔,因此如果完全删除 - 或 + 符号,就失去了使用 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);
}