dart - 转换时间戳

我找不到解决方案,我正在从 firebase 获取数据,其中一个字段是时间戳,看起来像这样 -> 1522129071。如何将其转换为日期?

Swift 示例(有效):

func readTimestamp(timestamp: Int) {
    let now = Date()
    let dateFormatter = DateFormatter()
    let date = Date(timeIntervalSince1970: Double(timestamp))
    let components = Set<Calendar.Component>([.second, .minute, .hour, .day, .weekOfMonth])
    let diff = Calendar.current.dateComponents(components, from: date, to: now)
    var timeText = ""

    dateFormatter.locale = .current
    dateFormatter.dateFormat = "HH:mm a"

    if diff.second! <= 0 || diff.second! > 0 && diff.minute! == 0 || diff.minute! > 0 && diff.hour! == 0 || diff.hour! > 0 && diff.day! == 0 {
        timeText = dateFormatter.string(from: date)
    }
    if diff.day! > 0 && diff.weekOfMonth! == 0 {
        timeText = (diff.day == 1) ? "\(diff.day!) DAY AGO" : "\(diff.day!) DAYS AGO"
    }
    if diff.weekOfMonth! > 0 {
        timeText = (diff.weekOfMonth == 1) ? "\(diff.weekOfMonth!) WEEK AGO" : "\(diff.weekOfMonth!) WEEKS AGO"
    }

    return timeText
}

我对 Dart 的尝试:

String readTimestamp(int timestamp) {
    var now = new DateTime.now();
    var format = new DateFormat('HH:mm a');
    var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp);
    var diff = date.difference(now);
    var time = '';

    if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {
      time = format.format(date); // Doesn't get called when it should be
    } else {
      time = diff.inDays.toString() + 'DAYS AGO'; // Gets call and it's wrong date
    }

    return time;
}

它会返回 waaaaaaaay 关闭的日期/时间。

更新:

String readTimestamp(int timestamp) {
    var now = new DateTime.now();
    var format = new DateFormat('HH:mm a');
    var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp * 1000);
    var diff = date.difference(now);
    var time = '';

    if (diff.inSeconds <= 0 || diff.inSeconds > 0 && diff.inMinutes == 0 || diff.inMinutes > 0 && diff.inHours == 0 || diff.inHours > 0 && diff.inDays == 0) {
      time = format.format(date);
    } else {
      if (diff.inDays == 1) {
        time = diff.inDays.toString() + 'DAY AGO';
      } else {
        time = diff.inDays.toString() + 'DAYS AGO';
      }
    }

    return time;
  }

最佳答案

您的时间戳格式实际上是秒(Unix 时间戳)而不是微秒。如果是,答案如下:

变化:

var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp);

var date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);

https://stackoverflow.com/questions/50632217/

相关文章:

flutter - 如何从 flutter 中获取 .apk 和 .ipa 文件?

android - Flutter:升级Play商店的版本代码

dart - 有没有办法将高度设置为抽屉页眉?

dart - 如何在我的 Flutter 应用程序中从 JWT 获取声明

dart - 在 Dart 中将字符串转换为 map

android - 没有权限(plugdev 组中的用户;你的 udev 规则错了吗?)

Flutter - 隐藏 FloatingActionButton

text - 如何为 Text 小部件 Flutter 实现 OnPressed 回调

dart - 在 Flutter 中向父 Widget 发送数据

dart - 没有 AppBar 的 Flutter TabBar