【问题标题】:Android Time.format("%a") giving incorrect day of the weekAndroid Time.format("%a") 给出不正确的星期几
【发布时间】:2011-10-17 12:14:03
【问题描述】:

我正在尝试检索给定时间戳的本地化日期。我的代码是这样的

String timestamp = "2011-08-01T15:55:03.000+02:00";
Time time = new Time();
time.parse3339(timestamp);
// In strftime format "%a" should be the abbreviated weekday name
// according to the current locale.
String result = time.format("%a")

由于 2011 年 8 月 1 日是星期一,结果字符串应该是“Mon”(假设是英语语言环境),而是“Sun”!

【问题讨论】:

  • parse3339 有没有可能失败?你能看到“零”吗?尝试将日期提前一个,看看它是否是“星期一”。

标签: android strftime


【解决方案1】:

你应该检查返回值:来自javadoc

Returns true if the resulting time value is in UTC time.

如果解析返回的 UTC 时间是星期日,您可能会得到这个。考虑到您上面的示例,不确定如何实现,但我想不出其他任何可以做到这一点的方法。

【讨论】:

    【解决方案2】:

    您真的需要解析给定的时间戳,还是想立即获取日期?在后者的情况下,使用:

    Time time = new Time();
    time.setToNow();
    String result = time.format("%a");
    

    【讨论】:

      【解决方案3】:

      必须调用time.normalize(),否则weekDay、yearDay、isDst和gmtoff的值都为0。

      正确的代码是:

      time.parse3339(timestamp);
      time.normalize(false);
      String localizedDayOfWeek = time.format("%a")
      

      感谢 Femi,他指出在某些情况下,时间可能会通过 time.parse3339() 转换为 UTC。

      【讨论】:

      • 谢谢这对我有帮助。周日一切都回来了。现在,如果我在每次更改日期后进行规范化,它就会起作用
      猜你喜欢
      • 1970-01-01
      • 2014-11-15
      • 2017-09-13
      • 2021-06-29
      • 1970-01-01
      • 2013-07-01
      • 2017-12-10
      • 2016-06-27
      • 2017-03-23
      相关资源
      最近更新 更多