【问题标题】:How to show Firestore serverTimestamp correctly depending on local如何根据本地正确显示 Firestore serverTimestamp
【发布时间】:2018-03-11 15:57:02
【问题描述】:

我无法做到这一点,想知道如何根据设备具有的 local 显示 Firestore FieldValue.serverTimestamp() 格式个人。

Firestore timestamp 看起来像这样

2018 年 3 月 10 日星期六 19:42:32 GMT+01:00

try {
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSS", Locale.getDefault());
        Date parsedDate = dateFormat.parse("Sat Mar 10 19:42:32 GMT+01:00 2018");
        txtCreationDate.setText(new Date(parsedDate.getTime()).toString());
     } catch (ParseException e) {
        txtCreationDate.setText("time error");
     }

如果一个用户在美国创建日期时间对象,那么如果另一个用户在意大利查看它,那么创建时间必须调整到他的时钟

我已经阅读了很多关于此的页面,但 dateFormat 解析器只给我错误。
请指教

【问题讨论】:

    标签: android localization google-cloud-firestore datetime-format


    【解决方案1】:

    我通常做的只是使用 Date 和 setTimezine。我的模型中的时间戳变量是长变量,我使用这样的代码将服务器时间转换为本地时间。

        DateFormat formatter = DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault());
        formatter.setTimeZone(TimeZone.getTimeZone("STRING FOR TIMEZONE"));
        String localizedToday = formatter.format(YOURDATEOBJECT);
    

    【讨论】:

    • 但我不知道 temezone,我的意思是我可以在 "Sat Mar 10 19:42:32 GMT+01:00 2018" 这样的字符串中看到它。是否应该在这里进行一些字符串操作以获得 GMT+01?
    • 时间戳变量在哪里?你有持有它的模型吗?
    • 这只是 java.util.Date 我刚刚检索了 Firestore MyClass my = document.toObject(MyClass);,它有一个 Date 字段用于 FieldValue.serverTimestamp()
    • 好的,所以如果它是 Java 数据,您可以检查编辑并将其传递给日期格式化程序。您已将对象与服务数据一起保存,在您的应用中检查用户时区,然后生成一个字符串,并将服务器时间转换为本地时间。
    • 没有时间,但会启动一些具有不同时区的模拟器并了解情况
    【解决方案2】:

    假设您有一个名为 MyClass 的模型类,它有一个 Date 字段和公共 setter 和 getter,要获取日期,请使用以下代码:

    Date date = yourClass.getDate();
    if (date != null) {
        DateFormat dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.getDefault());
        String creationDate = dateFormat.format(date);
        Log.d("TAG", creationDate);
    }
    

    【讨论】:

    • 谢谢,无论我使用DateFormat.FULL 还是DateFormat.LONG,都没有像它这样说应该是here 的时间部分。就像“1952 年 1 月 12 日”一样——没有时间……我调试并看到 Date 是“2018 年 3 月 10 日星期六 19:42:11 GMT+01:00 2018”
    • 对不起,我的错误。请参阅我更新的答案。它现在可以与新代码一起使用吗?
    • 我的 Q 的两个答案都是错误的,你们都应该使用 getDateTimeInstance 而不是 getDateInstance 和 getTimeInstance`
    • getTimeInstance() 只是时间?是不是你想要的?如果你想要两者,让我知道用getDateTimeInstance更新我的答案,好吗?
    • 感谢 Alex,小误会,我认为 timestamp 既是日期又是时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2020-02-05
    相关资源
    最近更新 更多