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

本文关键字:时间 转换 并用 获取 服务器 当前日期 | 更新日期: 2023-09-27 17:49:18

帮助:我有一个服务器有时间在格林尼治标准时间07:00小时。我的当地时间是格林尼治标准时间+ 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 PM,那么我的服务器时间将与我的本地时间相差12.30小时,即从我的本地时间减去12小时30分钟得到我的服务器时间。我需要从服务器时间得到我的本地时间。怎样才能实现呢?请给我一些建议。提前感谢您的回答

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

不需要知道服务器时区。如果服务器时间设置正确,您可以尝试:

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;

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

试试这个:

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

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

省略最后两行

那么您知道服务器的时间,并且知道服务器的时区?然后您可以像这样获得本地时间:

//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
 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

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