当语言环境为阿拉伯语时,来自UTC日历的SimpleDateFormat错误

时间:2018-10-17 22:26:22

标签: android kotlin locale arabic

我试图将时间戳转换为日期,然后将其放入请求的查询参数中。

这是将时间戳转换为日期的函数:

override fun fromTimestamp(timestamp: Long): String {
    val tz = TimeZone.getTimeZone("UTC")
    val calendar = Calendar.getInstance(tz)
    calendar.timeInMillis = timestamp

    // Quoted "Z" to indicate UTC, no timezone offset
    val df = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'")
    df.timeZone = tz

    return df.format(calendar.time)
}

当我的设备设置为英语时,这似乎工作得很好,在对日期进行URL编码之后,这就是参数1970-01-01T00%3A00%3A00.000Z

中显示的内容

现在,如果我的设备设置为阿拉伯语,则URL编码的日期应如下所示:%D9%A2%D9%A0%D9%A1%D9%A8-%D9%A1%D9%A0-%D9%A1%D9%A7T%D9%A1%D9%A9%3A%D9%A4%D9%A7%3A%D9%A1%D9%A9.%D9%A0%D9%A8%D9%A2Z

我只能假定所有假定为整数的字符都是表示日期的阿拉伯字符

经过一番谷歌搜索,我发现this discussion表示要使用来自美国的语言环境来初始化日历。但是,查看上面的代码,您会发现日历正在使用UTC时区进行初始化。

我认为从UTC时区实例化的日历会踢出整数,而不是用特定语言的字符来描述整数,但是我不确定Android系统如何使用该整数。

关于无论语言环境如何,如何修改函数以整数表示日历日期的任何想法?

1 个答案:

答案 0 :(得分:1)

我敢打赌

SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US)