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

C# 从服务器获取当前日期时间,并将其转换为c语言中的本地时间,c#,datetime,timezone,utc,localtime,C#,Datetime,Timezone,Utc,Localtime,帮助:我有一台服务器,时间是GMT-07.00小时。我的当地时间是格林尼治标准时间+05.30小时。我需要从服务器获取当前日期和时间,并将此日期和时间转换为我的本地时间。我已经尝试了许多代码,但仍然没有找到一种连续的方法来实现这一点。谁能帮帮我吗 string zoneId = "India Standard Time"; TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId); DateTime result = TimeZ

帮助:我有一台服务器,时间是GMT-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,那么我的服务器时间将与本地时间相差12.30小时,即从本地时间减去12小时30分钟,得到我的服务器时间。我需要从服务器时间获取我的本地时间。怎样才能实现呢??请给我建议一些解决办法。。提前感谢您的回答

如果您想在服务器时间上增加12小时30分钟以获得相等的本地时间假设您有服务器时间,您可以使用AddHours和AddMinutes功能来添加12:30小时

试试这个:

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

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

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

如果您的服务器的时钟设置正确,而不考虑时区,那么您自己的代码的前三行就完全正确。结果变量包含印度时区中的本地时间


只需省略最后两行。

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

如果从本地时间减去12:30,你的服务器时间不是等于本地时间吗?我想用我的服务器时间来计算本地时间。因此,当我尝试使用datetime dt=datetime.now.addhours12:30将12.30添加到服务器时间时;但仍然不起作用..有任何答案解决了你的问题吗?我正在检查。。以后我会告诉你结果的。。谢谢…另外,当所在位置的服务器关闭时,服务器时差也会发生变化,然后服务器从其他时区不同的区域加载。所以时差总是变化的。你能从服务器时间的位置识别时区信息吗?时区是美国山区时区。与GMT相差07小时。也就是GMT-07:00小时。你的答案不起作用,因为我需要当前日期,使用datetime。现在,再加上12小时30分钟,我的问题就不会有结果了。前两行可以缩减为datetime.UtcNow,它的性能更好。@MattJohnson:你说得对。我只是想让步骤更清楚。当然,但是如果你仔细看一下DateTime。现在,你可以通过调用DateTime.Now.ToUniversalTime看到这一点,你实际上是在做TimeZoneInfo.ConvertTimeFromUtcDateTime.UtcNow,TimeZoneInfo.Local.ToUniversalTime。因此,这不仅仅是关于清晰度,它实际上更慢、更昂贵。换句话说,DateTime.UtcNow实际上是对Windows系统时钟的直接调用。
 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