【问题标题】:json to human readable date date shows one less than actual datejson 到人类可读日期日期显示比实际日期少一
【发布时间】:2015-04-23 11:44:57
【问题描述】:

我将 json 日期转换为人类可读的日期,但它显示的日期少于实际日期。我 使用此代码对其进行转换:

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Calendar calendar = Calendar.getInstance();
            Long timeInMillis =    Long.valueOf(AttendanceModelList.get(position).getEmpdate());
            calendar.setTimeInMillis(timeInMillis);
            Date date=new Date(timeInMillis);
            viewHolder.textemployeedate.setText(df.format(date));

请帮忙

【问题讨论】:

  • 可能是时区效应。您应该尝试在 SimpleDateFormat-object 上设置适当的区域。
  • 但我没有使用时区,我只写了上面的日期代码
  • 即使您没有明确编写时区,Java 也会为您设置它,在您的情况下是系统时区。世界上的日历日期总体上是不一样的。
  • 那我该如何解决呢,请您用修改后的代码指导我,请帮助我解决这个问题

标签: android json date


【解决方案1】:

你说的总结:

当您尝试时,您的日历日期比预期的少一天 将java.util.Date 类型的全局时间戳解释为日历 日期。

这种现象可能由于时区效应或午夜变化而发生。在查看技术解决方案之前,您必须问自己:

  • 您使用TimeZone.getDefault() 的默认(系统)时区是什么?
  • 您是否在没有预期时区的服务器上运行您的代码?
  • 您希望在哪个时区查看日历日期? (与您预期的“实际”日期相关的时区)

如何指定时区?

java.util.Date d = ...; // from your JSON-timeInMillis?
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String tz = "Asia/Kolkata"; // or any other valid tz id
sdf.setTimeZone(TimeZone.getTimeZone(tz));
System.out.println(sdf.format(d));

【讨论】:

  • 嘿,先生,我按照你告诉我的方式设置了时区,但仍然遇到同样的问题。
  • @shivpaljodha 如果您告诉我们您正在运行代码的机器的时区,将会很有帮助。第二:什么样的代码让你觉得少了一天。一个简短但完整的可编译示例会很好(SCCE),但我不认为您给出了这样的 SCCE。
  • @shivpaljodha 我强烈希望您不要将您的陈述建立在观看使用系统时区的 java.util.Date.toString() 令人困惑的输出上。
  • 我认为你是对的,可能是时区问题我的代码在实际设备上显示正确的日期但在模拟器上我仍然遇到这个问题,感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2012-09-29
  • 1970-01-01
  • 2016-11-29
相关资源
最近更新 更多