如何将firebase时间戳转换为日期和时间

时间:2016-06-24 14:45:56

标签: android datetime timestamp

我试图从firebase时间戳获取日期和时间,如下所示:

   Date date=new Date(timestamp*1000);
   SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
   sfd.format(date)

但我得到的结果如下:

:02-02-48450 04:21:54
:06-02-48450 10:09:45
:07-02-48450 00:48:35

你可以看到这一年并不像我们一样。

所以,请帮我解决这个问题。

7 个答案:

答案 0 :(得分:21)

您的时间戳1466769937914等于2016-06-24 12:05:37 UTC。问题是你没有真正的理由将时间戳乘以1000,结果会给你1466769937914000。这相当于48450-02-01 21:51:54 UTC,因此您获得的结果在技术上是正确的,并且一切正常。您只需使用错误的输入数据提供代码,这就是我们必须修复的唯一部分。解决方案只是删除乘法,你应该都很好:

   SimpleDateFormat sfd = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
   sfd.format(new Date(timestamp))

答案 1 :(得分:3)

根据Firebase documentation,JSON可用的类型是:

  • String
  • Long
  • Double
  • Boolean
  • Map<String, Object>
  • List<Object>

引用另一个Stack Overflow post,建议您使用JSON date string format yyyy-MM-dd'T'HH:mm:ss.SSSZ代替纪元时间戳。

13352055435112012-04-23T18:25:43.511Z进行比较,您会注意到:

  • 它是人类可读但又简洁的
  • 正确排序
  • 它包括小数秒,可以帮助重建年表
  • 符合ISO 8601

ISO 8601已在国际上建立了十多年,并得到W3CRFC3339XKCD

的认可

答案 2 :(得分:0)

如果您希望从时间戳获取Date实例

如果您只需要从Timestamp获取Date对象,则Timestamp实例带有一个toDate()方法,该方法返回一个Date实例。

为清楚起见:

Date javaDate = firebaseTimestampObject.toDate()

答案 3 :(得分:0)

对于日期,您可以使用以下代码:

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

    let filterAction = UIContextualAction(style: .normal, title: "FILTER") { (action, view, bool) in
        print("Swiped to filter")
    }
    filterAction.backgroundColor = UIColor.blue

    return UISwipeActionsConfiguration(actions: [filterAction])
}

时间:

Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(time);
String date = DateFormat.format("dd-MM-yyyy", calendar).toString();

答案 4 :(得分:0)

  • firebase 时间基本上是秒和纳秒的组合 时间={ 秒:1612974698, 纳秒:786000000 }

total_miliseconds=(time.seconds+(time.nanoseconds)*0.00000001)*1000。 // 1 纳秒=1e-9 表示 0.00000001

新日期(total_miliseconds)

答案 5 :(得分:0)

.toDate() 方法应该就是您所需要的

您可能喜欢文档 here

作为一个额外的好处,您可能需要非常可读的输出

仅日期选项

.toDate().toDateString()

.toDate().toLocaleDateString()

仅时间选项

.toDate().toTimeString()

.toDate().toLocaleTimeString()

对象

然而,如果你收到一个对象,你可能会做这样的事情

{JSON.stringify(createdAt.toDate()).replace(/['"]+/g, '')}

将对象转换为字符串,然后替换字符串周围的引号。

答案 6 :(得分:-1)

String time = dataSnapshot.child(&#34; timeStamp&#34;)。getValue()。toString();             Long t = Long.parseLong(time);

日期myDate =新日期(t * 1000);

结果

5月11日星期五05:37:58 GMT + 06:30