获取时区偏移量并显示 C#
Get timezone offset and display C#
我需要获取我的程序运行所在机器的当前时区偏移量,并将其显示在文本框或标签中。
这是我的代码
var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
YourTextBoxName.Text = offset.TotalHours.ToString();
您发布的用于获取偏移量的代码是正确的:
var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
同样有效的是:
var offset = DateTimeOffset.Now.Offset;
其中任何一个的结果是当前本地偏移量,表示为 TimeSpan
。您唯一缺少的部分是如何将其格式化为 string
以供显示。虽然有多个选项,但我推荐一个值,例如 "+05:30"
或 "-08:00"
.
string sign = offset < TimeSpan.Zero ? "-" : "+";
string output = sign + offset.ToString(@"hh\:mm");
然后您可以将 output
字符串分配给您的标签值。
只是为了好玩,如果您想探索如何使用 Noda Time 完成相同的任务,您可以这样写:
Instant now = SystemClock.Instance.Now;
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
ZonedDateTime local = now.InZone(tz);
Offset offset = local.Offset;
string output = offset.ToString("m", CultureInfo.InvariantCulture);
我需要获取我的程序运行所在机器的当前时区偏移量,并将其显示在文本框或标签中。
这是我的代码
var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
YourTextBoxName.Text = offset.TotalHours.ToString();
您发布的用于获取偏移量的代码是正确的:
var offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
同样有效的是:
var offset = DateTimeOffset.Now.Offset;
其中任何一个的结果是当前本地偏移量,表示为 TimeSpan
。您唯一缺少的部分是如何将其格式化为 string
以供显示。虽然有多个选项,但我推荐一个值,例如 "+05:30"
或 "-08:00"
.
string sign = offset < TimeSpan.Zero ? "-" : "+";
string output = sign + offset.ToString(@"hh\:mm");
然后您可以将 output
字符串分配给您的标签值。
只是为了好玩,如果您想探索如何使用 Noda Time 完成相同的任务,您可以这样写:
Instant now = SystemClock.Instance.Now;
DateTimeZone tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
ZonedDateTime local = now.InZone(tz);
Offset offset = local.Offset;
string output = offset.ToString("m", CultureInfo.InvariantCulture);