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

转换时间戳

胡俊美
2023-03-14

我找不到这个问题的解决方案,我正在从firebase获取数据,其中一个字段是时间戳,看起来像这样-

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
}

我的飞镖尝试:

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;
}

并且它返回的日期/时间是错误的。

更新:

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;
  }

共有3个答案

鄢开诚
2023-03-14

为任何需要的人提供完整代码:

String readTimestamp(int timestamp) {
    var now = DateTime.now();
    var format = DateFormat('HH:mm a');
    var date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
    var diff = now.difference(date);
    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 > 0 && diff.inDays < 7) {
      if (diff.inDays == 1) {
        time = diff.inDays.toString() + ' DAY AGO';
      } else {
        time = diff.inDays.toString() + ' DAYS AGO';
      }
    } else {
      if (diff.inDays == 7) {
        time = (diff.inDays / 7).floor().toString() + ' WEEK AGO';
      } else {

        time = (diff.inDays / 7).floor().toString() + ' WEEKS AGO';
      }
    }

    return time;
  }

感谢亚历克斯·哈斯拉姆的帮助!

容远
2023-03-14

> < li>

从毫秒:

var millis = 978296400000;
var dt = DateTime.fromMillisecondsSinceEpoch(millis);

// 12 Hour format:
var d12 = DateFormat('MM/dd/yyyy, hh:mm a').format(dt); // 12/31/2000, 10:00 PM

// 24 Hour format:
var d24 = DateFormat('dd/MM/yyyy, HH:mm').format(dt); // 31/12/2000, 22:00

来自火神:

Map<String, dynamic> map = docSnapshot.data()!;
DateTime dt = (map['timestamp'] as Timestamp).toDate();

将一种格式转换为另一种格式:

>

  • 12小时至24小时:

    var input = DateFormat('MM/dd/yyyy, hh:mm a').parse('12/31/2000, 10:00 PM');
    var output = DateFormat('dd/MM/yyyy, HH:mm').format(input); // 31/12/2000, 22:00
    

    24小时至12小时:

    var input = DateFormat('dd/MM/yyyy, HH:mm').parse('31/12/2000, 22:00');
    var output = DateFormat('MM/dd/yyyy, hh:mm a').format(input); // 12/31/2000, 10:00 PM
    

    使用国际包(用于格式化)

  • 唐煜
    2023-03-14

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

    改变:

    dart prettyprint-override">var date = new DateTime.fromMicrosecondsSinceEpoch(timestamp);
    

    var date = DateTime.fromMillisecondsSinceEpoch(timestamp * 1000);
    
     类似资料:
    • 当将同一时间从Sri Jeyawardenepura转换回珀斯时(1/31/2005 11:30 PM),它转换到1/1/2006 3:00 AM。 时区换算为什么会有一个小时的差?

    • 从我的数据库我检索值为: 我想要上面的: 我试着用当前的时间戳跟踪 实际时间戳:2018年6月22日星期五16:07:35 更新了,我不想更新,有没有办法保持原样?

    • 下面的代码给出了2021年8月6日星期五12:16:27 GMT-0700(太平洋夏时制)的值,而不是mm/dd/yyyy hh:mm:ss。我在这里漏掉了什么?请告知

    • 本教程的重点是将来自 Yahoo finance API 的日期转换为 Matplotlib 可理解的日期。 为了实现它,我们要写一个新的函数,bytespdate2num。 def bytespdate2num(fmt, encoding='utf-8'): strconverter = mdates.strpdate2num(fmt) def bytesconverter(b)

    • 问题内容: 我有一个UTC时间(纪元Unix时间),其格式设置为时间戳,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要将格式化为Unix时间的时间戳转换为GPS时间格式,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要一个python程序(算法对我来说很好)将Unix时间格式的时间戳转换为GPS时间格式的时间戳。 有一个PHP程序可以这样做。我

    • 我正在尝试转换时区,但它增加了一天额外的java函数。 在上面的停用日期是25,当我给输入时,但在格式化后,它的转换为26,为什么有一天os得到了添加,如何避免它。