如何计算其他国家/地区的时间。在c#中使用我的本地机器时间?
示例:
我的系统有印度时间和我的阵列包含所有国家GMT时间。
如何进行计算以获得其他国家的时间?
如果我的时间是5.00 P.M如果这个国家是巴基斯坦,它应该显示下午4点30分
答案 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#类。