【发布时间】:2020-06-22 19:14:04
【问题描述】:
我在启动时从 Firebase 填充了一个静态 ArrayList 以存储各种值。我需要存储的 FB 字段之一是时间戳。
我需要将时间戳存储在我的数组中,然后以可读的日期格式显示它。
初始化 ArrayList:
static ArrayList<String> suspectedValues = new ArrayList();
从 FB 获取时间戳:
Timestamp dtg = (Timestamp) document.getData().get("dtg");
将时间戳设置为字符串并存储在数组中:
String timeStamp = String.valueOf(dtg);
String suspectedData [] = {timeStamp};
suspectedValues.addAll(Arrays.asList(suspectedData));
稍后在不同的活动 onCreate:
int counter = 0;
for(int i = 0; i < suspectedValues.size(); i = i + 4){
String timeStamp = suspectedValues.get(4);
Date dtg = new Date(Long.parseLong(timeStamp));
gMap.addMarker(new MarkerOptions().position(latLng).title(suspected).snippet("id: " + id + " | " + taggedAt + ": " + dtg).icon(BitmapDescriptorFactory.fromBitmap(smallMarker)));
if(suspectedValues.size() != 0){
counter = counter + 4;
}
}
我已尝试在 Timestamp、Date 和 String 之间进行多种不同的转换,但无法使其正常工作。当我尝试设置 Date dtg 时,我得到:
java.lang.NumberFormatException: For input string: "56.504800874303676"
at java.lang.Long.parseLong(Long.java:594)
at java.lang.Long.parseLong(Long.java:636)
我也试过了:
Timestamp dtg = (Timestamp) document.getData().get("dtg");
Date date = dtg.toDate();
String timeStamp = date.toString();
String suspectedData [] = {timeStamp};
suspectedValues.addAll(Arrays.asList(suspectedData));
与:
String timeStamp = suspectedValues.get(4);
Date theSameDate = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse(timeStamp);
但它不断抛出 Parse 异常。
Timestamp from FB: Timestamp(seconds=1583706187, nanoseconds=895000000)
Converted to Date: Sun Mar 08 22:23:07 GMT 2020
timestamp String going into Array: Sun Mar 08 22:23:07 GMT 2020
timestamp String coming out of Array: 62.76105524614817
I/MapsActivity: ParseException: java.text.ParseException: Unparseable date: "62.76105524614817"
【问题讨论】:
-
我建议你不要使用
Timestamp和Date。这些课程设计不良且早已过时。而是使用来自java.time, the modern Java date and time API 的类。 -
Firebase 输出一个时间戳,所以我必须使用它...我认为...
-
From: code.luasoftware.com/tutorials/google-cloud-firestore/… "Firestore 使用 Timestamp 类在客户端(Android)上表示 DateTime,它不存储 TimeZone 信息。Java Date 有一个方便的 Timestamp 方法:Date toDate( ) 和 Timestamp(Date date)。没有方便的 Timestamp 方法可用于 Java Time 或threetenbp 或 ThreeTenABP。"
-
那很不幸。谢谢你的信息。
-
@OleV.V.为清楚起见 - Firestore 时间戳是服务器生成的时间戳,而不是本地生成的时间戳。这是一个更安全的选项,因为可以更改本地(设备级别)时间戳,而服务器生成的时间戳保证准确,因为它们来自服务器,而不是设备。 OP:您没有必须使用 Firestore 时间戳,但对于时间戳需要准确的用例,这是一个安全的选择。
标签: java firebase date google-cloud-firestore timestamp