如何在颤振中获取当前时区

时间:2019-01-14 07:39:20

标签: flutter timezone

我是扑朔迷离的新手,我的rest api使用当前时区为Europe / london。我不知道当前时区的波动。 stackoverflow中有一个关于此主题的问题,但没有用户给出答案。

Flutter Timezone (as ZoneId)

任何人都可以引导我,如何使用飞镖获取当前时区的抖动。

6 个答案:

答案 0 :(得分:8)

DateTime 是默认类,提供解决时区相关问题所需的使用时区和时间偏移。

 DateTime dateTime = DateTime.now();
 print(dateTime.timeZoneName);
 print(dateTime.timeZoneOffset);

输出:

1.印度

timeZoneName: IST
timeZoneOffset: 5:30:00.000000

2.美国/洛杉矶

timeZoneName: PST
timeZoneOffset: -8:00:00.000000

时区列表:https://help.syncfusion.com/flutter/calendar/timezone

答案 1 :(得分:1)

<块引用>

//// 时区名称。 /// /// 该值由 操作系统,可以是 /// 缩写或全名。
/// /// 在浏览器或类 Unix 系统上通常返回 缩写,/// 如“CET”或“CEST”。在 Windows 上返回 全名,例如///“太平洋标准时间”。
external String get timeZoneName;

/// 时区偏移量, /// 是两者之间的差值 当地时间和 UTC。 /// /// 时区的偏移量为正 UTC 以东。 /// /// 注意,JavaScript、Python 和 C 返回 UTC 和 /// 本地时间之间的差异。 Java、C# 和 Ruby 返回本地时间和 /// UTC 之间的差异。
external Duration get timeZoneOffset;

DateTime.now().timeZoneName

如果时间实例是 UTC。

timeInstance.toLocal().timeZoneName

此外,

<块引用>

//// DateTime 类不提供国际化。 /// 到 国际化你的代码,使用 /// intl 包。

要以 Europe/Moscow 格式获取时区: 来自 here:使用 flutter_native_timezone

final String currentTimeZone = await FlutterNativeTimezone.getLocalTimezone();
print(currentTimeZone); // Europe/Moscow

答案 2 :(得分:0)

答案 3 :(得分:0)

答案 4 :(得分:0)

  var date = DateTime.now().toIso8601String().split(".")[0];
  if(DateTime.now().timeZoneOffset.isNegative){
    date += "-";
  } else {
    date += "+";
  }
  final timeZoneSplit = DateTime.now().timeZoneOffset.toString().split(":");

  var hour = int.parse(timeZoneSplit[0]);
  if(hour < 10){
    date += "0${timeZoneSplit[0]}";
  }
  date += ":" + timeZoneSplit[1];
  print(date);

这会起作用,并且会给出类似 2021-07-15T19:28:25+05:30 的结果。这里 5:30 是 IST。哪个应该不错。

答案 5 :(得分:-1)

也许对某人有用,我正在使用:

String formatDateToStringWithTimeZone(DateTime date) {
  var dur = date.timeZoneOffset;
  if (dur.isNegative)
    return "${DateFormat("y-MM-ddTHH:mm:ss").format(date)}-${dur.inHours.toString().padLeft(2, '0')}:${(dur.inMinutes - (dur.inHours * 60)).toString().padLeft(2, '0')}";
  else
    return "${DateFormat("y-MM-ddTHH:mm:ss").format(date)}+${dur.inHours.toString().padLeft(2, '0')}:${(dur.inMinutes - (dur.inHours * 60)).toString().padLeft(2, '0')}";
}