更改Dart中的本地时区

3

在我的本地机器上,这个日期DateTime(2021, 10, 27, 00, 00, 00)处于GMT+4时区。

当我将这段代码推送到我们的远程服务器时,由于远程服务器位于GMT+2时区,所以相同的日期被解释为GMT+2,导致代码行为不同。

我知道可以使用DateTime.utc构造函数,但我希望手动输入这个日期,并且始终遵循GMT+4。

因此,解决方案是将远程服务器的时区也更改为GMT+4。但怎样在Dart上下文中做到这一点?(而不是系统范围内)


请查看此链接:https://prafullkumar77.medium.com/flutter-format-a-date-with-locale-using-dart-c6fa400c8a53。 - OMi Shah
请查看package:timezone - jamesdlin
1个回答

3
很遗憾,DateTime不支持时区本地化,正如jamesdlin所建议的那样,您需要使用第三方包,例如timezone

如何使用

步骤1:安装包

dependencies:
  timezone: any

步骤2:初始化库

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');

步骤4:使用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)直接从格式化的字符串中解析日期。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接