如何将DateTime转换为不同的时区?DateTime类具有两种方法.toLocal()和.toUtc()。但是,如果我想在其他时区显示时间。我该怎么办?
[DateTime
不包含时区信息,因此仅在系统和UTC的时区可用时,您无法在特定时区中创建DateTime
。
您可以将DateTime包装在自定义类中,并将时区信息添加到包装器中。您还需要每个时区的偏移量表,然后从UTC日期添加/减去偏移量。
您可以使用TimeZoneInfo.ConvertTime()更改时区。尝试这样
DateTime hwTime = new DateTime(2007, 02, 01, 08, 00, 00);
try {
TimeZoneInfo hwZone = TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time");
TimeZoneInfo.ConvertTime(hwTime, hwZone, TimeZoneInfo.Local));
}
catch (TimeZoneNotFoundException) {
Console.WriteLine("Timezone not found");
}
catch (InvalidTimeZoneException) {
Console.WriteLine("Invalid Timezone");
}
这将从夏威夷标准时间转换为本地时间。
这只是一个例子。使用它根据您的需要进行转换。
我为此编写了一个程序包。它称为Instant,它可以转换全球任何给定时区中的DateTime。详细查看https://aditya-kishore.gitbook.io/instant/
将DateTime转换为时区的基本用法非常简单:
//Assumes Instant is in your pubspec
import 'pacakges:instant/instant.dart';
//Super Simple!
DateTime myDT = DateTime.now(); //Current DateTime
DateTime EastCoast = dateTimeToZone(zone: "EST", datetime: myDT); //DateTime in EST zone
return EastCoast;
这与一行代码和最小的麻烦。