【问题标题】:Setting the correct specific Time Zone in the Philippines在菲律宾设置正确的特定时区
【发布时间】:2022-08-09 00:57:30
【问题描述】:

所以我在我的 android 应用程序中有一个 DateFormat 函数,它计算并显示已发布在我的数据库中的“数据”的日期和时间。果然,它显示在我的应用程序上,但不是正确的时间。 \"GMT\" 不是正确的,并且 \"GMT+8\" 不起作用,我也尝试过 \"Asia/Manila\" 但无济于事。任何帮助表示赞赏。

  private String calculateTimeAgo(String date) {
    SimpleDateFormat sdf = new SimpleDateFormat(\"dd-M-yyyy hh:mm:ss\");
    sdf.setTimeZone(TimeZone.getTimeZone(\"Manila\"));
    try{
        long time = sdf.parse(date).getTime();
        long now = System.currentTimeMillis();
        CharSequence ago =
                DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
        return ago+\"\";
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }
    return \"\";
}
  • 基本上,最好不要使用DateSimpleDateFormat。 javadoc 不清楚,但是当您调用DateFormat.parse 时,您之前设置的时区将被覆盖。它不能确定用于解析日期的区域。使用 Java 8+ 日期/时间 API:baeldung.com/java-8-date-time-intro

标签: java android android-studio


【解决方案1】:

您可以使用即时数据类型。它以 UTC 格式存储日期和时间,然后将其转换为带有 timeZone 的 LocalDateTime。

例如:

    Instant instantDateTime = Instant.now(); // 2022-07-28T05:46:07.652147008Z
    LocalDateTime localDateTime = LocalDateTime.ofInstant(instantDateTime, ZoneOffset.UTC); //2022-07-28T05:46:07.652147008
    LocalDate localDate = LocalDateTime.ofInstant(instantDateTime, ZoneOffset.UTC).toLocalDate(); //2022-07-28

现在你得到你的本地日期和时间。我想这可以帮助你,谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-12
    • 2013-07-03
    • 2016-02-11
    • 1970-01-01
    • 2022-01-17
    • 2011-01-31
    • 2023-04-03
    • 2013-12-30
    相关资源
    最近更新 更多