当前位置: 首页 > 面试题库 >

Java DateFormat parse()不遵守时区

詹斌蔚
2023-03-14
问题内容
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("America/New_York"));
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
df.setTimeZone(TimeZone.getTimeZone("America/New_York"));

try {
    System.out.println(df.format(cal.getTime()));
    System.out.println(df.parse(df.format(cal.getTime())));
} catch (ParseException e) {
    e.printStackTrace();
}

结果如下:

2011-09-24 14:10:51 -0400

2011年9月24日星期六20:10:51

为什么当我解析来自format()的日期时,它不遵守时区?


问题答案:

您正在打印调用的结果Date.toString(),该调用
始终 使用默认时区。基本上,Date.toString()除了调试之外,您不应该使用其他任何东西。

不要忘记,一个Date具有 时区-它代表着一个时刻,因为自Unix纪元(午夜1970年1月1日UTC)毫秒。

如果您再次使用格式化程序格式化日期 ,则 应该得出与以前相同的答案。

顺便说一句,如果您在Java中进行大量的日期/时间工作,我建议您使用Joda
Time
代替Date/ Calendar。这是一个 很大 更好的API。



 类似资料:
  • 我正在尝试以一种方式管理日志记录,即最早的存档日志文件一旦达到总累积大小限制或达到最大历史记录限制,就会被删除。在Logback 1.1.7中使用时,滚动文件附加器将继续创建新的存档,尽管超过了设置。 这是日志中的一个bug还是我没有正确配置滚动文件附加器?

  • 问题内容: 在管道级别,我指定代理和节点(带有标签和自定义工作区)。管道启动时,它将在指定的节点上运行,但是当命中“ build job”时,将选择第一个可用节点。我尝试使用NodeLabel插件,但是那也不起作用。 这是我的: 问题答案: 当您使用Jenkinsfile中的指令时,它告诉Jenkins您想要构建一个完全独立的作业。正是 其他工作 需要指定将要构建的代理。如果这是基于Jenkins

  • 我对一个异步函数有点拘泥于此。 我要完成的是创建一个batchProcessing函数(batchGetSubs),它将循环访问一组文件,读取一个ID,然后发出一个API请求,等待一个响应(问题),然后用格式化的数据写入一个新文件。 问题--我尝试了异步和等待,以及推送承诺和尝试使用承诺.所有这些都是为了等待承诺的解决,但没有成功。当前的行为是,在API调用实际返回所有数据之前,我获取Promis

  • 在JFreeChart中,我使用CategoryDataset和createLineChart生成图表。这看起来像这样: 请注意图表周围的灰色区域。我想把它换成透明的,或者至少是白色的,就像上面的旧的一样。 我试着这样做: 但它不起作用。 我如何将背景改为白色,并将情节的背景改为灰色(就像旧的一样?) 谢谢 我可以更新绘图的背景,但不能更新图表面板的背景。 这是有以下选项的图表: 在这里,我想用黄

  • 作为一个相对的Java新手,我很困惑地发现了以下几点: 点. java: Edge.java: 主代码段:私有集blockedEdges 为什么这令人惊讶?因为在我将其编码为依赖平等之前,我检查了留档,它说: 如果该集合包含指定的元素,则返回true。更正式地说,当且仅当这个集合包含元素e,使得(o==null?e==null : o.equals(e)) 这句话非常清楚,它指出只需要相等。f.e

  • 给定以下代码: 如果kafka消费者是Vert. x Kafka消费者,我希望 会发生在Reactive IO线程上。但是,它在Vert. x事件循环线程上执行。当我运行以下测试类时,相同的场景按照预期在IO线程上运行map方法。 是什么导致线程执行中出现这种差异?