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

为什么当年份小于1884时,它会删除几毫秒?

仰城
2023-03-14
问题内容
DateTime start = new DateTime().withYear(1884);
System.out.println(start);
System.out.println(start.minusYears(1));

输出量

1884-01-11T08:26:10.234-08:00
1883-01-11T08:26:10.234-07:52:58

编辑1:我不正确。它没有删除1.02秒

DateTime start = new DateTime().withYear(1884);
DateTime other = start.minusYears(1);
long diffMs = start.getMillis() - other.getMillis(); //31536422000

编辑2:

有趣的是,我对toString();-(-08:00-07:52:58)的输出感到困惑

编辑3:

使用Java日历,我看不出任何区别:

Calendar cal = Calendar.getInstance();
cal.set(start.getYear(), 
        start.getMonthOfYear(), 
        start.getDayOfMonth(), 
        start.getHourOfDay(), 
        start.getMinuteOfHour(), 
        start.getSecondOfDay());
System.out.println(cal.getTime());

cal = Calendar.getInstance();
cal.set(start.getYear()- 1, 
        start.getMonthOfYear(), 
        start.getDayOfMonth(), 
        start.getHourOfDay(), 
        start.getMinuteOfHour(), 
        start.getSecondOfDay());
System.out.println(cal.getTime());

输出:

Mon Feb 11 18:46:42 PST 1884
Sun Feb 11 18:46:42 PST 1883

问题答案:

从该时区历史页面 ;

1883年11月18日引入了美国大陆的四个标准时区。英国已经对英格兰,苏格兰和威尔士采用了自己的标准时区,并于1884年为国际时区收集了国际共识。

换句话说,美国时区在这两个时间戳之间改变。

编辑:如果您将您的时区设置为PST(时区),您将不会看到此效果,而如果您将其设置为某个位置(例如America /
Los_Angeles),则可以。这是由于 PST的时区偏移未更改
,而是创建了PST,而洛杉矶从LMT更改为PST。也就是说,洛杉矶时间已更改,而PST却没有更改。

作为演示,您可以在linux上尝试;

# PST test
$ TZ=PST8PDT date -d '1883-01-01 12:00:00 UTC'
Mon Jan  1 04:00:00 PST 1883

# America/Los_Angeles test
$ TZ=America/Los_Angeles date -d '1883-01-01 12:00:00 UTC'
Mon Jan  1 04:07:02 LMT 1883


 类似资料:
  • 在index.hpp中,我创建了一个具有多个数据成员的类,如、等。我在类外部定义了一个构造函数。在program.cpp中,我创建了一个名为SAM的对象。当我试图编译它时,它显示错误。什么原因? Program.cpp index.hpp 错误信息

  • 我在使用Java8的java应用程序中工作。 我已经集成了数据库(多个数据库Oracle,MySQL,Postgres)和其中在DB i字符串创建的日期。 DB中的日期格式为-2015-07-29 16:23:28.143 我从DB获取这个,并在Localdatetime对象中设置 所以这里的问题是我不想在响应中显示/发送毫秒。我想显示/发送日期,如2015-07-29 16:23:28 我尝试了

  • 我想删除至少有一个“NaN”的所有行。数据框如下图所示,但实际的数据框大约有1000004行。 完整的CSV文件:文件 我写的代码如下: 我预计至少有300000行,但我只有大约200000行。当我签入实际的CSV文件时,第一个NaN至少在第380000行之前不会出现。那么,为什么删除多余的行?

  • 问题内容: Firebird在除法而不是舍入时会截断小数位。此外,它以分子和分母的小数位数为基础,将返回值的小数点位数作为基础。 为什么Firebird会被截断而不是四舍五入?为何将返回值基于查询中的小数位数? Firebird2.5: SQL Server 2012: Oracle 11gR2: MySQL 5.5.32: PostgreSQL 9.3.1: SQLite: 问题答案: 在Fir

  • 我试图只得到今年的数据,但我的“where子句”似乎有问题。但当我在where子句中输入特定年份时,它就起作用了。除了where子句之外,所有的东西都在工作。 我希望你们能帮我。