Dart DateTime.parse timeZoneOffset 始终为 0

2024-01-04

DateTime.parse 创建的 DateTime 似乎总是为“timeZoneOffset”返回 0

  1. 我在非 UTC 时区中创建了一个 ISO8601 字符串:https://timestampgenerator.com/1610010318/+09:00 https://timestampgenerator.com/1610010318/+09:00

  2. 我将该字符串传递给 DateTime.parse:

  DateTime date = DateTime.parse("2021-01-07T18:05:18+0900");
  1. 问题:当我期望 +0900 时,timeZoneOffset 为 0。
  print(date.timeZoneOffset);  --> 0:00:00.000000
  print(date.timeZoneName); --> UTC 
  print(date); --> 2021-01-07 09:05:18.000Z

Dart 日期时间文档 (https://api.dart.dev/stable/2.10.4/dart-core/DateTime/parse.html https://api.dart.dev/stable/2.10.4/dart-core/DateTime/parse.html):

结果始终采用当地时间或 UTC。如果指定了 UTC 以外的时区偏移,则时间将转换为等效的 UTC 时间。

为什么 timeZoneOffset 为 0?我需要将什么字符串传递给 DateTime.parse 才能让它以本地时间存储时间,而不是将其转换为等效的 UTC 时间?


Dart SDK 并没有真正处理不同的时区,这就是为什么parse需要本地时区(即运行程序的系统上的时区)或 UTC。

如果您尝试解析没有任何时区信息的时间戳,Dart 会假设时间位于本地时区(我在丹麦,正在使用浪漫标准时区):

void main() {
  print(DateTime.parse("2021-01-07T18:05:18").timeZoneName); // Romance Standard Time
  print(DateTime.parse("2021-01-07T18:05:18+0900").timeZoneName); // UTC
}

您可以使用以下命令将 UTC 时间戳转换为本地时间.toLocal()在时间戳上。但同样,这只会将其转换为您自己系统上的时区,而不是来自您解析的时间的时区:

void main() {
  print(DateTime.parse("2021-01-07T18:05:18+0900").toLocal().timeZoneName); // Romance Standard Time
}

如果您想使用时区数据处理时间,您应该查看包时区:https://pub.dev/packages/timezone https://pub.dev/packages/timezone

关于保存时区偏移的一些注意事项

您应该意识到,在大多数情况下,以可以再次获取原始偏移量的形式保存时间并没有真正意义。问题是大多数国家/地区都有夏令时等规则,或者用户正在旅行并且确实希望系统能够正确处理时间。

因此,在很多情况下,用户并不真正期望再次获得相同的偏移量,而是希望时间与基于当前位置和时间的当前偏移量一致。

时区包的作用例如不允许您解析时间戳并将偏移量与其一起保存(因为偏移量与位置不同)。相反,它希望您指定时间戳的使用位置,以便它可以计算该位置的当前偏移量。

因此,一般来说,我建议您在存储时始终将时间保存为 UTC。当要使用数据时,您应该有某种方法来了解接收器的位置(例如,以某种形式的配置文件询问用户)并使用时区包将时间转换为该位置。如果应用程序在数据接收者拥有的设备上运行,您可以使用以下命令将 UTC 转换为本地时间.toLocale().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dart DateTime.parse timeZoneOffset 始终为 0 的相关文章

  • 在 Dart 中查找和替换字符串

    我正在为这个应用程序使用 flutter 但我在应用程序的逻辑方面遇到了问题 任何帮助深表感谢 应用程序目标 通过以下方式将所有输入缩写解码 替换 为单词 用户通过文本框输入文本 应用程序查找任何缩写 几个 并仅用文本替换缩写 我能够使用一
  • java中如何查找两个时间戳的差异?

    我有一个ArrayList包括多个时间戳 目的是找到第一个和最后一个元素的差异ArrayList String a ArrayList get 0 String b ArrayList get ArrayList size 1 long d
  • 如何在 Flutter 中开始加载主题

    我希望用户可以在我的应用程序中更改并保存主题颜色 但是 我不知道如何在应用程序开始运行时加载保存的主题颜色 比如我想在下面的评论处直接加载保存的主题颜色 我尝试了共享首选项 但是 SharedPreference 实例需要运行await 这
  • SizedBox 与 Padding、Margin 的区别

    我们应该使用 Margin Padding 或 SizedBox 来在小部件之间提供间距吗 小部件的 Margin 和 padding 可以完成工作 那么 SizedBox 的用途是什么 SizedBox creates space bet
  • 在Python中从feedparser解析不同的日期格式?

    我正在尝试通过以下方式获取两个不同 RSS 提要中的条目的日期feed解析器 http feedparser org 这是我正在做的事情 import feedparser as fp reddit fp parse http www re
  • 如何在flutter中从设备存储读取CSV文件

    我想将数据从 flutter 中的 CSV 文件导入到 firebase 数据库中 因此 我使用文件选择器从设备中选择 CSV 文件 现在我如何从该文件中读取数据 首先从 dart 包导入 file picker 和 CSV 包 比定义方法
  • PHP strtotime返回Mysql UNIX_TIMESTAMP的不同值

    我在 stackoverflow 上搜索过帖子 发现了一些类似的帖子 但我认为这是一篇不同的帖子 我的 PHP 和 Mysql 服务器的时区全部设置为 UTC 在表中我使用时间戳字段 值为 2010 11 08 02 54 15 我使用这样
  • 当模拟器存在时 Flutter 应用程序不运行

    模拟器在那里 但当我启动应用程序时它不起作用 请帮忙 我已经尝试了一切 Cal Flutter 新手 我已遵循安装指南并尝试了其他堆栈流答案的修复 我正在运行 Windows 8 1 单一用户 我已经从命令提示符和 android 终端中尝
  • LINQ 到实体日期时间比较

    我在将 LINQ 中的日期与实体表达式进行比较时遇到问题 我想检查一下是否DateTime DateTime whole day 我想这样做 return context Events Any x gt x UserId id x Date
  • Flutter - 每次应用程序重新启动后保留变量的值

    在我的一页上 我希望我的用户从一个变量上的默认文本开始 codeDialog 然后我希望他们更改该文本 之后他们编写的文本将成为我的新默认文本 遗憾的是我无法让它发挥作用 现在 当我重新启动应用程序并打开该屏幕时 它会重置为null 我认为
  • VSCode和flutter,如何连接多个设备?

    我在 macOS 上使用 Visual Studio Code 来开发 Flutter 应用程序 我可以在 VSC 左下角选择一个设备 我还可以使用在多个设备上运行flutter run d all 我想知道如何使用 VSC 中的调试控制台
  • 如何在 Javascript 中获取时区名称(PDT、EST 等)? [复制]

    这个问题在这里已经有答案了 使用 Javascript 有没有办法根据用户的设备获取用户的时区名称 PDT EST 等 我尝试过的代码 const timezone jstz determine const userTimezone tim
  • 如何让 BottomNavigationBar 粘在键盘颤动的顶部

    我正在尝试制作一个简单的聊天应用程序 所以我创建了一个脚手架和我的身体 将是消息和我的bottomNavigationBar将是我的打字字段和发送图标 我添加了一个文本字段 但键入时导航栏被键盘隐藏 这是我的代码BottomNavigati
  • 将 Flutter 前端与适用于 Android 和 iOS 的 .NET Core 后端相结合

    目前在一家使用 NET 不是 Core 的公司工作 但希望切换到 NET Core 并想通过创建一个具有 Flutter io 前端和 NET Core 后端的应用程序来实现这一目标 带后端的应用程序只是为了了解 NET Core 的功能
  • 在 SQLite 数据库中存储日期时间值的最佳方式(Delphi)

    我将把日期时间值存储在 SQLite 数据库中 使用 Delphi 和 DISqlite 库 数据库的本质是它永远不需要在计算机或系统之间传输 因此互操作性不是一个限制 相反 我的重点是阅读速度 日期时间字段将被索引 我将对其进行大量搜索
  • flutter stepper 小部件 - 验证各个步骤中的字段

    我正在使用步进器小部件来收集用户信息并对其进行验证 我需要在每个步骤调用 API 因此在每个继续按钮的步骤中验证每个字段 我正在使用表单状态和表单小部件 但是问题是它验证步进器中所有步骤中的整个字段 我如何仅验证步进器中的单个步骤 我浏览了
  • flutter - SliverList / SliverChildBuilderDelegate 提供初始索引或允许负索引

    我目前正在 Flutter 中使用 SliverList 和 SliverChildBuilderDelegate 构建日历视图 这样我就不必一次渲染日历中的每个项目 第一个日期是纪元时间 即 1970 年 1 月 1 日 最后一个日期是在
  • DART:将来 then 的语法

    我不明白的语法then clause 1 myFuture 6 then erg gt print erg What s erg gt expr语法上 我以为这会是一个函数 但是 then callHandler2 erg 不起作用 错误
  • Flutter MacOs 访问文件

    我正在尝试在 Flutter 中构建一个自定义桌面应用程序 以便能够加载图片 例如图库 为此 我将要求用户选择一个文件夹 它会自动显示图片 现在 从简单的事情开始 由于这是第一次为 Mac 开发 我只是尝试通过Image file new
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter

随机推荐

  • 使用 Java 从二进制文件中读取整数值

    我正在尝试使用写入大于 256 的值DataOupPutStream write 方法 当我尝试使用读取相同的值时DataInputStream read 它将返回 0 所以 我用了DataOutputStream writeInt and
  • ASP.NET Core 的构建错误 - “...当前设置,将使用版本 2.1.0-preview3-26411-06”

    我使用创建了一个示例项目dotnet 但是在构建项目时出现以下错误 错误 项目已使用 Microsoft NETCore App 版本 2 1 0 rc1 恢复 但根据当前设置 将使用版本 2 1 0 preview3 26411 06 要
  • 本地化数据库字段中的邮政/实际地址显示

    谁能向我指出国际邮政 住宅 送货地址格式模板的列表 这些模板使用某种可解析的标准词汇作为地址部分 理想的列表包含一个国家 地区代码 然后是使用可替换标记的格式 以便我可以将数据库地址字段替换到模板中以生成可本地格式打印的内容 例如 NZ f
  • 如何将数据存储到android中的Secure Element中

    我想在 Android 中创建一个类似谷歌钱包的应用程序 据说 所有支付凭证都存储在一个名为安全元件包含在手机中 我如何访问它安全元件并将我的卡凭证存储到其中 我的目标是在收银台使用我的手机 Nexus 而不是我的卡 所以我想要的是将一些数
  • 更新和替换字符串的一部分

    我有一个有两列的表格 ID and Value 我想更改第二列中一些字符串的一部分 表格示例 ID Value 1 c temp 123 abc 111 2 c temp 123 abc 222 3 c temp 123 abc 333 4
  • 执行ContentResolver插入时出错

    执行插入新数据到内容提供程序时出错 请参见下面的代码 PS 我只是将下面的代码直接放入 Activity 的 onCreate 中 然后执行 ContentValues values new ContentValues values put
  • 谁定义了正则表达式?

    W3C 定义了 HTML 标准 CSS 标准和一些其他标准 我知道还有其他团体也定义了标准 谁定义了正则表达式的语法 正则表达式由多个标准机构涵盖 包括 IEEE 标准 1003 1 所谓的 Posix http pubs opengrou
  • 将 UTC 日期转换为日期时间字符串 Titanium

    我有一个日期字符串 2012 11 14T06 57 36 0000 我想转换为以下格式 2012 年 11 月 14 日 12 27 我尝试了很多解决方案 包括将 UTC 日期转换为日期时间字符串 Javascript https sta
  • 将随机排列代码从 MATLAB 移植到 Python

    如何将这段 MATLAB 代码转换为 Python 例如 对于随机文件 FileA rand 10 2 FileB randperm 10 for i 1 10 fileC FileB i 1 FileA i 1 for the x fil
  • PyQt QMediaPlayer setPosition 对位置值进行四舍五入

    我有一个应用程序 旨在帮助同步实验视频和数据信号 该应用程序有一个视频小部件和一个滑块 可以设置视频的时间位置 然而 QMediaPlayer 只会以 500 毫秒 1000 毫秒的间隔设置位置 在我的应用程序中为 500 毫秒 在设计的应
  • Javascript 和 PHP 中十进制转 RGB

    我正在尝试将十进制值转换回 RGB 值 假设这是编译十进制值的公式 c r 255 255 g 255 b 例如 rgb 16 120 78 加起来是 1071078 如何在没有任何 溢出 的情况下求解 r g 和 b 提前致谢 使用除法
  • 我的 NDK 项目因 CPU 架构相关问题而无法编译

    有人可以解释一下为什么我会收到此错误吗 Build command failed Error while executing process C Users Kevin Desktop Android Sdk ndk bundle ndk
  • Dalvik的内存模型和Java的一样吗?

    Dalvik的内存模型和Java s http java sun com docs books jls third edition html memory html 17 4 我特别感兴趣的是是否读写参考和非long non double原
  • 在CALayer中添加UIImage

    我必须添加 UIImageView 作为 MapView 的子视图 为此 我在 MapView 上方创建了一个图层 在这一层中 我想放置我的图像 但我得到一个白色矩形 没有其他东西 我的图像不可见 这是代码 void viewDidLoad
  • 每当我创建新的 Rails 应用程序时,如何创建 Postgres 用户和数据库?

    我遵循了这个非常有用的教程 http blog willj net 2011 05 31 setting up postgresql for ruby on rails development on os x http blog willj
  • glewInit() 因“缺少 GL 版本”、SDL2 OpenGL 上下文、cygwin 编译器而失败

    下面的程序创建一个窗口 该窗口除了按 esc 关闭外不执行任何操作 当我用cygwin编译它时 没有错误 我使用的GLEW来自CYGWIN 端口 http cygwinports org SDL2 是版本 2 0 3 来自他们的websit
  • WPF 与 Unity 容器 - 如何注册 ViewModel 并将其解析为 View

    您好 我正在尝试在 WPF MVVM 应用程序中使用 Unity 容器 我没有使用过 Prism 因为它看起来很重 这是应用程序结构 我试图弄清楚如何将视图解析为视图模型以及视图模型 服务 的依赖关系 应用 Views MainWindow
  • 如何更改 UIDatePicker 色调颜色?

    我知道 UIDatePicker 无法自定义 但我想知道 iOS 14 提醒应用程序如何显示蓝色色调 而日历显示红色色调 我将 AppDelegate 中的全局色调设置为 label如下所示 但无法为日期选择器设置相同的值 UIView a
  • Debugdiag 显示“Microsoft VC 运行时堆”使用超过 1GB

    您好 我的 WPF 应用程序存在泄漏 我正在尝试使用内存转储文件来查找问题所在 使用 WinDbg 和 SOS 我找不到任何可疑的东西 然后我尝试了 DebugDiag 我得到了Microsoft VC 运行时堆 私有 有 1 42 GB
  • Dart DateTime.parse timeZoneOffset 始终为 0

    DateTime parse 创建的 DateTime 似乎总是为 timeZoneOffset 返回 0 我在非 UTC 时区中创建了一个 ISO8601 字符串 https timestampgenerator com 16100103