如何计算其他国家的时间。在c#中使用我的本地机器时间?

时间:2010-09-28 10:24:13

标签: c# .net datetime time timezone

如何计算其他国家/地区的时间。在c#中使用我的本地机器时间?

示例:

我的系统有印度时间和我的阵列包含所有国家GMT时间。

如何进行计算以获得其他国家的时间?

如果我的时间是5.00 P.M如果这个国家是巴基斯坦,它应该显示下午4点30分

3 个答案:

答案 0 :(得分:5)

假设您使用的是.NET 3.5或更高版本,则需要获得正确的TimeZoneInfo(例如,通过ID)。从那时起,它就相当简单了 - 我建议您在任何可用的地方使用UTC,并且可能DateTimeOffset而不是DateTime,因为它不那么模糊。使用DateTimeOffset.UtcNow获取当前时间,获取要转换为的适当时区,然后使用TimeZoneInfo.ConvertTime(DateTimeOffset, TimeZoneInfo)。这将为您提供适当的新DateTimeOffset(即在目标时区内抵消适当的金额),然后您可以适当地格式化。

答案 1 :(得分:1)

首先,确保您的DateTime具有DateTimeKind.Local(或者是具有有效UTC时间的UTC)。如果没有,你可以转换它:

myDate.SpecifyDateTimeKind(DateTimeKind.Local)

(尽可能接近创建日期的位置;稍后可以避免混淆。)

现在找到您感兴趣的国家/地区的时区:

// In case you don't know what the key is:
var allTimeZones = TimeZone.GetSystemTimeZones();

// Then when you have the key:
var theirTimeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneKey);
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(myDateTime, theirTimeZone);

希望有所帮助。

答案 2 :(得分:0)

首先,您可以编写一个函数,您可以在其中传递当前时间(INDIA)和时间差(以+小时:分钟或 - 小时:分钟)。然后,您的代码可以计算结果并将其传回。

string time(string IndiaTime, string timeDifference) {
 string array1 = IndiaTime.split(':');
 // Over here I have considered you have passed the time in 24 hour format.
 int timeinMinutes = Convert.ToInt32(array1[0]) * 60 + Convert.ToInt32(array[1]);
 timeinMinutes = timeinMinutes + timeDifference;
 int minutes = time % 60;
 int hour = time / 60;
 If(hour > 24)
 hour = hour - 24;
 String finalTime = Convert.ToString(hour) + ":" + Convert.ToString(minutes);
 return finalTime;
}

除此之外,您可以使用上面发布的各种内置C#类。