C# 获取我所在时区的当前日期

C# 获取我所在时区的当前日期,c#,datetime,C#,Datetime,我有以下代码,可在我的本地开发计算机和托管站点上显示不同的结果: JavaScriptSerializer js = new JavaScriptSerializer(); TimeZoneInfo nzZone = TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time"); litUTC.Text = DateTime.UtcNow.ToString() + " " + js.Serialize(DateTime.UtcN

我有以下代码,可在我的本地开发计算机和托管站点上显示不同的结果:

JavaScriptSerializer js = new JavaScriptSerializer();
TimeZoneInfo nzZone = TimeZoneInfo.FindSystemTimeZoneById("New Zealand Standard Time");
litUTC.Text = DateTime.UtcNow.ToString() + " " + js.Serialize(DateTime.UtcNow) + " " + js.Serialize(TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, nzZone));
在我的本地计算机上,它显示:

2018年5月21日凌晨2:15:24“/日期(15268924867)/”/日期(15268924867)/”

但是,在我的托管网站上,它显示:

2018年5月21日凌晨2:16:01“/日期(1526868961581)/”/日期(1526930161581)/”

你知道为什么托管网站上的那个变成了1526930161581吗?这两者之间的差距很大。因此,当我将其转换回最新格式时,它变成了2018年5月22日。我将它们从UtcNow相同转换为我当前的时区,它们应该是相同的或几秒钟不同。
谢谢

检查运行托管站点的服务器上的时区。现在不是新西兰标准时间。区别在于:

15268961581-1526930161581=61200000毫秒(17小时)

由于新西兰的标准时间是+12,服务器上的时区看起来是-5,这是东部时间。因此,看起来服务器位于美国(或加拿大)

请注意,当
JavaScriptSerializer
序列化日期时,它首先将日期转换为UTC。然后计算Unix历元毫秒数,并将结果放入
/Date()/
中。所以不要使用
UtcNow
,直接像
js.serialize(DateTime.Now)
那样序列化日期。在JavaScript中使用
new Date()
构造函数中的毫秒值时,它以UTC为单位,并使用浏览器的时区将其转换为本地时间

以下是来自以下方面的上述说明:

Microsoft的ASP.NET AJAX[…]将.NET日期时间值编码为JSON 字符串,其中字符串的内容为/Date(ticks)/和where 刻度表示自历元(UTC)起的毫秒数。1989年11月29日, 上午4:55:30,UTC编码为“/日期(628318530718)/”


JavaScriptSerializer
存在一些问题,
/Date()/
序列化是由Microsoft创建的,不是标准。建议使用支持ISO标准的库(例如,
Newtonsoft.Json
)。

是的,我知道它不可能是相同的。但他们不会有什么不同。几分钟就可以了。如果您在js FIDLE中运行警报(新日期(1526930161581))。您将获得2018年5月22日。另一个是2018年5月21日。是的,该问题有效。这是相同的代码,但结果不同。你是说这是不一样的,因为时间在前进。但是差距太大了。谢谢你怎么会想到36714的?1526930161581 - 1526868924867? 它不是36714。您可以尝试使用DateTime.Now.ToUniversalTime()而不是DateTime.UtcNow。您可以在以下位置读取utc发布的日期时间: