dart 将timestamp转换为DateTime flutter

wgxvkvu9  于 2023-05-26  发布在  Flutter
关注(0)|答案(3)|浏览(185)

我有这个值(int):

**230523110326

存在:

  • 23天
  • 05 -月
  • 23年
  • 11小时
  • 03 -分钟
  • 26秒

我现在想把它转换成一个DateTime,因为我正在使用这个方法
DateTime.fromMillisecondsSiceEpoch(230523110326, isUtf: true)
但他还给我这个
DateTime (1977-04-22 02:11:50.366Z)
有人有解决办法吗?
我已经试过将该值乘以1000,但仍然不起作用。

dvtswwa3

dvtswwa31#

我的朋友fromMillisecondsSiceEpoch不是你想的那样阅读更多关于Epoch:

在编程和时间系统中,“历元”通常是指用作计算其他时间值的参考的固定时间点。历元通常是时间计算过程中的特定日期、起点或重要标记。
在Flutter中的DateTime.fromMillisecondsSinceEpoch中,epoch通常指的是“Unix epoch”或“Unix timestamp”。它被定义为1970年1月1日00:00:00 UTC。DateTime.fromMillisecondsSinceEpoch方法希望您提供自Unix纪元以来的毫秒时间值。然后,它返回该时刻的相应DateTime对象。

你的情况应该怎么办?

手工做,使用方法String. substring(first, last)来得到一个一个的日期,月,年,小时,分钟,秒。示例:

String date = "230523110326". substring(0,2); // then convert to int as you like
agxfikkp

agxfikkp2#

void main(List<String> args) {
  var value = 230523110326;
  var svalue = value.toString();
  var list = <int>[];
  for (var i = 0; i < svalue.length/2; i++) {
    var ss = svalue.substring(2*i, 2*i+2);
    if (i==2) ss = '20$ss';
    list.add(int.parse(ss));
  }
  var dt = DateTime(list[2],list[1],list[0],list[3],list[4],list[5]);
  print(dt);
  print('\nJob done!');
}

输出:

2023-05-23 11:03:26.000

Job done!
8mmmxcuj

8mmmxcuj3#

如果你的输入已经是一个整数,你可以做整数运算来提取部分:

void main() {
  var timestamp = 230523110326;

  var components = <int>[];
  for (var i = 0; i < 6; i += 1) {
    components.add(timestamp % 100);
    timestamp = timestamp ~/ 100;
  }

  var [seconds, minutes, hour, twoDigitYear, month, day] = components;
  var year = fromTwoDigitYear(twoDigitYear); // See below.

  var dateTime = DateTime(year, month, day, hour, minutes, seconds);
  print(dateTime); // Prints: 2023-05-23 11:03:26.000
}

参见https://stackoverflow.com/a/76273568/了解如何将两位数的year转换为四位数的yaer。
最后,我想指出的是,目前还不清楚您的时间戳格式应该是ddMMyy还是yyMMdd,因为您的特定示例模糊地使用了23来表示日和两位数的年。上面的代码假设ddMMyy匹配您列出的顺序,但是yyMMdd对于整数时间戳更合理,因为它允许使用整数比较来比较(大多数)时间戳。(然而,使用两位数年份而不是四位数年份意味着这种比较在2000年之前的年份中无法正常工作。

相关问题