【问题标题】:Get time in specific format from timestamp including TimeZone从包括 TimeZone 在内的时间戳中获取特定格式的时间
【发布时间】:2020-12-03 07:43:27
【问题描述】:

我有一个简单的函数可以从时间戳中提取时间,即字符串。

timestamp(input)  : "2020-08-13T09:33:17Z"
outputTime(output): "09:33"
desired output    : "12:33"

功能:

fun getTimeFromTimestamp(timestamp: String): String {
    val inputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss\'Z\'", Locale.getDefault())
    val time = inputFormat.parse(timestamp) ?: Date()
    val outputFormat: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())
    val outputTime = outputFormat.format(time)

    return outputTime
}

问题是它不影响输出中的时区,在这种情况下为GMT+3

你可以看到我的调试screenshot

如何确保显示的时间包括随附的时区 (GMT+3)?

【问题讨论】:

标签: android datetime timezone simpledateformat


【解决方案1】:

输出时间采用该格式,因为您在此行中指定了它(HH:mm

val outputFormat: DateFormat = SimpleDateFormat("HH:mm", Locale.getDefault())

如果您希望它包含时区,请将时区附加到输出字符串

编辑

"HH:mm zZ" 似乎对我有用,看看这个fiddle

【讨论】:

  • 补充一点:“Z”代表时区!因此,例如“HH:mm \'Z\'”会给你 09:54 GMT+3。可以在格式化程序中使用的其他可能值可以在这里找到docs.oracle.com/javase/7/docs/api/java/text/…
  • @RobbeRoels 将“HH:mm”更改为“HH:mm Z”返回 09:52 +0300 而不是 12:52。
  • @Ole V.V.编辑清除了空气我会推荐他的答案
【解决方案2】:

问题是您导入开始时间"2020-08-13T09:33:17Z" AS GMT+3,然后尝试将其格式化为GMT+3。尝试将您的导入日期格式化为GMT+0,然后将输出格式保持为GMT+3

有关如何在 SimpleDateFormat 上设置时区的更多信息,您可以查看此答案:https://stackoverflow.com/a/18124407/4383500

这应该将您的时间从 GMT 时间戳转换为本地时间

  fun getTimeFromTimestamp(timestamp: String): String {
        val inputFormat: DateFormat = SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss\'Z\'")
        inputFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
        val time = inputFormat.parse(timestamp) ?: Date()
        val outputFormat: DateFormat = SimpleDateFormat("HH:mm ,z")
        inputFormat.setTimeZone(TimeZone.getDefault());
        val outputTime = outputFormat.format(time)
    return outputTime

【讨论】:

    【解决方案3】:

    使用 LocalDateTime [java.time] 代替 SimpleDateFormat 在 2020 年不推荐。

    查看link

    【讨论】:

    • 我同意 java.time,而不是 LocalDateTime。我建议Instant.parse("2020-08-13T09:33:17Z").atZone(ZoneId.of("Europe/Tallinn")).toLocalTime()。它产生12:33:17。或者可以使用DateTimeFormatterZonedDateTimeatZone() 直接格式化为所需的格式,例如12:33。当然,应该替换所需的时区(而不是使用像 +03:00 这样的裸偏移)。
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 2018-07-14
    • 2013-06-22
    • 1970-01-01
    • 2014-11-02
    • 2020-04-30
    • 1970-01-01
    • 2016-08-23
    相关资源
    最近更新 更多