从服务器获取当前日期时间并将其转换为 c# 中的本地时间

Posted

技术标签:

【中文标题】从服务器获取当前日期时间并将其转换为 c# 中的本地时间【英文标题】:Get current date time from server and convert it into local time in c# 【发布时间】:2022-01-23 19:14:02 【问题描述】:

帮助:我有一个在 GMT-07.00 有时间的服务器。我的当地时间是 GMT+05.30 小时。我需要从服务器获取当前日期和时间并将这个日期和时间转换为我的本地时间。我尝试了很多代码,但仍然没有找到连续的方法。谁能帮帮我。

string zoneId = "India Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, tzi);
DateTime cu = result.ToUniversalTime();
DateTime cur = cu.ToLocalTime();

以上方法我都试过了,还是没有得到正确的答案。假设我当前的本地时间是 2014 年 3 月 9 日下午 12:51:00,那么我的服务器时间将与我的本地时间相差 12.30 小时,即从我的本地时间减去 12 小时 30 分钟以获得我的服务器时间。我需要从服务器时间获取我的本地时间。怎么可能实现??请给我一些解决方案..提前感谢您的回答

【问题讨论】:

如果您从本地时间中减去12:30,您的服务器时间是否与本地时间相当? 我想使用我的服务器时间来获取我的本地时间。因此,当我尝试使用 datetime dt=datetime.now.addhours(12:30); 将 12.30 添加到我的服务器时间时;但仍然无法正常工作.. 是否有任何答案解决了您的问题? 我现在正在检查它。我稍后会告诉你结果。谢谢... 【参考方案1】:

无需知道服务器时区。如果服务器时间设置正确,你可以试试这个:

DateTime serverTime = DateTime.Now; // gives you current Time in server timeZone
DateTime utcTime = serverTime.ToUniversalTime(); // convert it to Utc using timezone setting of server computer

TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzi); // convert from utc to local

要在本地检查,请更改您的计算机时区以匹配您的服务器。然后运行代码。我检查了一下,它工作正常。

更新:

前两行可以混合成一行,如下所示。具有更好的性能:

DateTime utcTime = DateTime.UtcNow;

【讨论】:

前两行可以缩减为DateTime.UtcNow,效果会好很多。 @MattJohnson:你是对的。我只是想更清楚地显示这些步骤。 当然,但是如果您查看DateTime.Now,您会看到通过调用DateTime.Now.ToUniversalTime(),您实际上正在执行TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.Local).ToUniveralTime()。所以这不仅仅是关于清晰度,它实际上更慢而且更昂贵。也就是说DateTime.UtcNow实际上是直接调用Windows系统时钟。【参考方案2】:

如果您想将 12 小时和 30 分钟添加到您的服务器时间以获得相等的本地时间(假设您有服务器时间),您可以使用 AddHours()AddMinutes() 函数来添加 12:30 小时

试试这个:

DateTime dt= /*your server time*/;
dt=dt.AddHours(12);
dt=dt.AddMinutes(30);

【讨论】:

同样当所在的服务器宕机时,服务器时差会发生变化,然后服务器从不同时区的其他地区加载。所以时差总是变化的.. 您是否能够识别服务器时间即将到来的Timezone 信息? 时区为美国山区时区。与格林威治标准时间相差 07 小时。那是 GMT-07:00 小时。 您的答案将不起作用,因为我需要当前日期,因此使用 datetime.now 并添加 12 小时 30 分钟不会为我的问题提供结果。【参考方案3】:

如果您的服务器时钟设置正确(无论时区如何),那么您自己代码的前三行是完全正确的。 result 变量包含印度时区的当地时间。

只需省略最后两行。

【讨论】:

【参考方案4】:

所以你有服务器的时间,你知道服务器的时区吗?然后你可以像这样得到当地时间:

//Server: 09-Mar-2014 11:00:00 AM:
var serverTime = new DateTime(2014, 3, 9, 11, 00, 00);

var serverZone = TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time");
var localZone = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

var localTime = TimeZoneInfo.ConvertTime(serverTime, serverZone, localZone);
// => 09-Mar-2014 11:30:00 PM

【讨论】:

【参考方案5】:
 DateTime serverTime = DateTime.Now;

 DateTime utcTime = serverTime.ToUniversalTime(); 

// convert it to Utc using timezone setting of server computer

 TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");

 DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzi); 

// convert from utc to local

【讨论】:

【参考方案6】:

获取服务器的 UTC 日期和时间的最简单方法是 (SELECT GETUTCDATE();)。试试看。

【讨论】:

以上是关于从服务器获取当前日期时间并将其转换为 c# 中的本地时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PostgreSQL 中获取表的每一天的第一个日期并将其转换为 JSON

将日期转换为正确的格式

C#将字符串转换为没有时间的日期时间

Oracle - 都获取 XML 日期字符串并将其转换为日期

SOA 转换中的 XSLT 映射以获取上个月的最大日期

如何获取当前日期和时间