【发布时间】:2020-07-07 15:37:11
【问题描述】:
在 c# 中,我这样做
DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss")
但它让我获得了服务器时间。但是我也有这种格式的偏移量,例如"-04:00"。如何结合偏移量来获取当地时间?
谢谢
【问题讨论】:
-
你能分享你的代码,它处理偏移量吗?可以加减偏移值
在 c# 中,我这样做
DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss")
但它让我获得了服务器时间。但是我也有这种格式的偏移量,例如"-04:00"。如何结合偏移量来获取当地时间?
谢谢
【问题讨论】:
如果您的意思是要获取包括偏移量在内的服务器系统本地时间,请使用DateTimeOffset.Now 属性。然后根据需要对其进行格式化。
DateTimeOffset.Now.ToString("yyyy-MM-dd HH:mm:ss zzz")
The zzz specifier 将偏移量生成为您要求的 ISO 8601 扩展格式的字符串。
如果您的意思是您有一个来自其他地方的 UTC 偏移量,并且您想将其应用于服务器的当前 UTC 时间,那么请改为执行以下操作:
TimeSpan offset = TimeSpan.Parse("-04:00");
DateTimeOffset now = DateTimeOffset.UtcNow.ToOffset(offset);
string result = now.ToString("yyyy-MM-dd HH:mm:ss zzz");
这需要当前服务器时间,并应用ToOffset 函数来调整您提供的偏移量。
请记住,偏移量与时区不同。您拥有的偏移量可能是当前日期和时间的偏移量,或者可能是该时区中的某个其他日期和时间的偏移量。例如,美国东部时间在夏令时是 UTC-4,但在标准时间是 UTC-5。请参阅the timezone tag wiki 中的“时区!= 偏移量”。
【讨论】:
"-04:00",它与系统时区不同,所以我需要考虑这一点。
DareTimeOffset不限于系统时区,它显式存储偏移量
new Date() 的时区偏移量,这是否考虑到你最后提到的夏令时?
new Date().getTimeZoneOffset() - 那将是 current 偏移量。您可以如上所述将其应用于“现在”,但您不能简单地将其存储在数据库中并再次使用它以应用于不同的日期时间。更全面的方法是使用Intl.DateTimeFormat().resolvedOptions().timeZone 从浏览器获取用户的 IANA 时区 ID。存储该字符串。将它与System.TimeZoneInfo 对象和我的TimeZoneConverter 库一起使用,或者与Noda Time 一起使用。
这行得通。
DateTime.UtcNow.AddHours(DateTimeOffset.Parse("01/01/0001 00:00:00 -04:00").Offset.TotalHours).ToString("yyyy-dd-M--HH-mm-ss")
【讨论】:
4/7可豆4月7日或7月4日
这应该可行
DateTime.UtcNow.AddHours(DateTimeOffset.Parse("01/01/0001 00:00:00 -04:00").Offset.TotalHours).ToString("yyyy-dd-M--HH-mm-ss",CultureInfo. InvariantCulture);
需要添加指令
using System.Globalization;
【讨论】:
"-04:00" 转换为-4?
DateTime.UtcNow
.CultureInfo. InvariantCulture 是干什么用的?