在我的本地机器上,这个日期DateTime(2021, 10, 27, 00, 00, 00)
处于GMT+4时区。
当我将这段代码推送到我们的远程服务器时,由于远程服务器位于GMT+2时区,所以相同的日期被解释为GMT+2,导致代码行为不同。
我知道可以使用DateTime.utc
构造函数,但我希望手动输入这个日期,并且始终遵循GMT+4。
因此,解决方案是将远程服务器的时区也更改为GMT+4。但怎样在Dart上下文中做到这一点?(而不是系统范围内)
DateTime
不支持时区本地化,正如jamesdlin所建议的那样,您需要使用第三方包,例如timezone。
dependencies:
timezone: any
main.dart
import 'package:timezone/data/latest.dart' as tz;
void main() {
WidgetsFlutterBinding.ensureInitialized();
tz.initializeTimeZones();
runApp(MyApp());
}
注意: 导入此包时建议使用as tz
。
import 'package:timezone/standalone.dart' as tz;
final detroit = tz.getLocation('America/Detroit');
TZDateTime
类import 'package:timezone/standalone.dart' as tz;
final localizedDt = tz.TZDateTime.from(DateTime.now(), detroit);
TZDateTime
对象:
TZDateTime(...)
TZDateTime.utc(...)
TZDateTime.local(...)
TZDateTime.now(...)
TZDateTime.fromMillisecondsSinceEpoch(...)
TZDateTime.fromMicrosecondsSinceEpoch(...)
TZDateTime.from(...)
TZDateTime.parse(Location location, String formattedString)
直接从格式化的字符串中解析日期。
package:timezone
。 - jamesdlin