当前位置: 首页 > 知识库问答 >
问题:

DateTime.now()。toUtc()。difference和DateTime.now()。在飞镖中,差异产生相同的结果

巫马善
2023-03-14

基本上是标题。我想得到日期时间和当前时间之间的差异。日期以UTC为单位,我首先将当前时间转换为UTC,然后找到差异。但在两种情况下,转换为UTC或不转换为UTC的差异是相同的,但不应如此。

 print(DateTime.now().toUtc());
    print(DateTime.now());
    print(DateTime.now().toUtc()
        .difference(dateFormat.parse(comment.postedOn))
        .inMinutes);
    print( DateTime.now()
        .difference(dateFormat.parse(comment.postedOn))
        .inMinutes);

结果是

内/扑动 (20796): 2020-07-01 15:33:46.221975Z

I/颤动 (20796): 2020-07-01 21:03:46.222207

I/颤振 (20796): 361

I/颤振 (20796): 361

共有1个答案

白迪
2023-03-14

在对Dart SDK的源代码进行一些挖掘之后,它看起来像是<code>毫秒历元DateTime值和本地DateTime值的差异相同,因为它们都表示相同的时间。

final now = DateTime.now();
final utc = now.toUtc();
final date = DateTime.parse('2020-07-01T19:00:00Z');

print(utc);
print(now);
print(date);
print(utc.microsecondsSinceEpoch);
print(now.microsecondsSinceEpoch);
print(date.microsecondsSinceEpoch);

print(utc.difference(date).inMinutes);
print(now.difference(date).inMinutes);
2020-07-01 16:26:54.464Z

2020-07-01 17:26:54.464

2020-07-01 19:00:00.000Z

1593620814464000

1593620814464000

1593630000000000

-153

-153

./sdk/lib/core/date_time.dart

/**
 * The value of this DateTime.
 *
 * The content of this field is implementation dependent. On JavaScript it is
 * equal to [millisecondsSinceEpoch]. On the VM it is equal to
 * [microsecondsSinceEpoch].
 */
final int _value;

js_runtime/自由/core_patch飞镖

@patch
Duration difference(DateTime other) {
  return new Duration(milliseconds: _value - other._value);
}

./vm/lib/date_patch.dart

@patch
Duration difference(DateTime other) {
  return new Duration(microseconds: _value - other._value);
}

如果您不想要这种默认行为,那么您可以检查< code>DateTime值< code>isUtc是否存在。如果值不是UTC,那么您可以添加< code>timeZoneOffset来实现您想要的行为。

extension DateTimeExtensions on DateTime {
  Duration differenceTimeZoneOffset(DateTime other) {
    if (this.isUtc) {
      return this.difference(other);
    } else {
      return this.add(this.timeZoneOffset).difference(other);
    }
  }
}

final now = DateTime.now();
final utc = now.toUtc();
final date = utc.add(Duration(hours: 1));

print(utc);
print(now);
print(date);
print(utc.microsecondsSinceEpoch);
print(now.microsecondsSinceEpoch);
print(date.microsecondsSinceEpoch);

print(utc.differenceTimeZoneOffset(date).inMinutes);
print(now.differenceTimeZoneOffset(date).inMinutes);
2020-07-01 17:24:54.923Z

2020-07-01 18:24:54.923

2020-07-01 18:24:54.923Z

1593624294923000

1593624294923000

1593627894923000

-60

0
 类似资料:
  • 问题内容: 我正在尝试使用比较运算符将当前日期和时间与模型中指定的日期和时间进行比较: 该脚本错误如下: 这些模型如下所示: 我也有使用区域设置日期和时间的django。 我找不到的是django用于DateTimeField()的格式。天真还是知道?以及如何获取datetime.now()来识别语言环境datetime? 问题答案: 默认情况下,该对象位于Python中,因此您需要使它们都成为天

  • 问题内容: 我有以下db型号: 我使用以下命令添加新实例: 我的问题:数据库中的所有记录在日期字段中都有相同的值,即第一次付款的日期。服务器重新启动后,一条记录具有新的日期,而另一条记录与第一条记录具有相同的日期。看起来有些数据被缓存了,但我找不到位置。 数据库:mysql 5.1.25 django 1.1.1版 问题答案: 在定义模型时,似乎正在计算,而不是每次添加记录时。 Django有一个

  • 问题内容: docs显示了使用以下方法 获取给定时区中的当前时间的 方法: 并将其与基于delorian的代码进行比较: 我相信这个例子应该写成: 更简洁。 在最后一个代码示例失败而第一个代码继续运行的情况下,是否有任何情况? 更新: 当前示例: 那仍然太冗长。 问题仍然存在:您是否需要通过utc进行显式往返,或者可以使用它? 问题答案: 什么时候失败? 据我所知,在任何情况下它都不会失败。 在参

  • 问题内容: 最近,我在尝试执行操作时遇到了很奇怪的错误: SqlDateTime溢出。必须介于1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。 关键是,我只用于在对象中设置属性,并且在调用该属性后将其显示为应有的状态。 以前没有发生过,现在该功能总是中断。我完全一无所知-我的SQL Server上的日期似乎还可以。 可能是什么原因造成的? 编辑 我认为这

  • 为了测试不同时区的影响,我更改了日期 我的手机已连接到Wifi,但未登录到移动网络。 这是预期的行为吗?我不确定下面的“本地”指的是什么: 构造一个DateTime实例,其中包含本地时区中的当前日期和时间。 还有其他方法可以获得电话时间吗? 颤振医生 示例应用程序

  • 我有一个flutter应用程序,我在其中使用SQFLITE插件从SQLite DB中获取数据。这里我面临一个奇怪的问题。根据我的理解,我们使用async/wait或then()函数进行异步编程。这里我有一个db.query()方法,它执行一些SQL查询以从DB中获取数据。在这个函数获取数据后,我们在. then()函数中做一些进一步的处理。然而,在这种方法中,我遇到了一些问题。从我调用getExe