【问题标题】:How to get current timezone region (tz database name) in Flutter如何在颤动中获取当前时区
【发布时间】:2019-06-08 04:43:56
【问题描述】:

我是 Flutter 的新手,我的 rest api 将当前时区设为欧洲/伦敦。我不知道让当前时区颤抖。 stackoverflow 中有一个关于此主题的问题,但没有用户给出答案。

Flutter Timezone (as ZoneId)

任何人都可以指导我,我怎样才能使用飞镖获得当前时区。

【问题讨论】:

  • 您可以使用的名称 - DateTime.now().timeZoneName
  • 我不想要这种格式,我的 api 采用欧洲/伦敦时区的格式。但这段代码给了我欧洲标准时间
  • 如果我希望 timeZoneName 为:印度标准时间或太平洋标准时间怎么办?

标签: flutter timezone


【解决方案1】:

【讨论】:

  • 我对如何获取时区不太了解,也有点困惑。你能给我获取当前时区的sn-p吗? @Gunter Zochbauer
  • 包文档应该解释它。我没有具体的 sn-p。
  • 如果我希望 timeZoneName 为:印度标准时间或太平洋标准时间怎么办?
【解决方案2】:

为此有一个很棒的库: https://pub.dev/packages/flutter_native_timezone

【讨论】:

  • 如果我希望 timeZoneName 为:印度标准时间或太平洋标准时间怎么办?
【解决方案3】:

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

【讨论】:

  • 如果我希望 timeZoneName 为:印度标准时间或太平洋标准时间怎么办?
  • dateTime.timeZoneName 只返回“+5:30”而不是 IST
  • 刚刚检查:它返回缩写字符串。 DateTime.now().timeZoneName
  • dateTime timeZoneName 为我返回 +0430,我无法获得缩写
  • @DNS 转到 darpad.dev 并尝试此代码 void main() { print(DateTime.now().timeZoneName); }
【解决方案4】:

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

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

【讨论】:

  • 如果偏移量为1:30,那不会是上面代码的bug吗?
【解决方案5】:

/// 时区名称。 /// /// 此值由 操作系统,可以是 /// 缩写或全名。
/// /// 在浏览器或类 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

【讨论】:

    【解决方案6】:
      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。哪个应该不错。

    【讨论】:

      猜你喜欢
      • 2020-04-23
      • 2020-04-19
      • 2020-04-11
      • 1970-01-01
      • 2016-09-03
      • 1970-01-01
      • 2012-01-01
      • 1970-01-01
      相关资源
      最近更新 更多