[英]How to convert timezone offset text "+01:00" to timespan
我有一個 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) //for -07:00
TimeSpan.TryParse("07:00", out TimeSpan ts) //for +07:00
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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.