我想将Indian DateTime对象转换为Eastern DateTime对象。意味着我想更改特定DateTime对象的时区。为此,我写了以下代码:
string easternZoneId = "Eastern Standard Time";
TimeZoneInfo easternZone = TimeZoneInfo.FindSystemTimeZoneById(easternZoneId);
string indianZoneId = "India Standard Time";
TimeZoneInfo indianZone = TimeZoneInfo.FindSystemTimeZoneById (indianZoneId);
DateTime d = TimeZoneInfo.ConvertTime (DateTime.Today, indianZone, easternZone);
当我尝试运行此语句时,我将在控制台中发现异常。
如何运行此代码?我想把时间转换成东部时间。
编辑:现在我在Unity Editor中运行我的代码。我有iMac系统。 我想为iPhone设备运行此代码。
答案 0 :(得分:3)
我的电脑上不存在“印度标准时间”。您可以在PC上列出所有支持的时区(我已经注意到,这可能与其他PC的不同)列出如下:
var timeZones = TimeZoneInfo.GetSystemTimeZones();
foreach (TimeZoneInfo timeZone in timeZones)
{
Console.WriteLine(timeZone.Id);
}
输出:
答案 1 :(得分:0)
来自msdn https://msdn.microsoft.com/en-us/library/system.timezoneinfo.findsystemtimezonebyid(v=vs.110).aspx enter link description here
FindSystemTimeZoneById尝试将id与Windows XP和Windows Vista下注册表的HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones分支的子项名称匹配。该分支不一定包含时区标识符的完整列表。如果应用程序需要,您可以通过调用CreateCustomTimeZone方法的一个重载或通过调用FromSerializedString来反序列化表示所需时区的TimeZoneInfo对象来创建特定时区。但是,这些方法调用创建的时区不包含在注册表中,并且无法使用FindSystemTimeZoneById方法检索。只能通过CreateCustomTimeZone或FromSerializedString方法调用返回的对象引用访问这些自定义时区。
方法用法示例:
// Get Tokyo Standard Time zone
TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
DateTime tstTime = TimeZoneInfo.ConvertTime(thisTime, TimeZoneInfo.Local, tst);
Console.WriteLine("Time in {0} zone: {1}", tst.IsDaylightSavingTime(tstTime) ?
tst.DaylightName : tst.StandardName, tstTime);
Console.WriteLine(" UTC Time: {0}", TimeZoneInfo.ConvertTimeToUtc(tstTime, tst));
时区列表: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
只需找到您的时区ID并插入示例中。