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

new Date(new Date()。getTime()-25 * 24 * 60 * 60 * 1000)获得了意外日期

水焱
2023-03-14
问题内容

我想生成日期列表,但发现日期从-25 * 24 * 60 * 60 * 1000开始是错误的

我的本地日期是2016-07-17。我有

2016-07-17
2016-07-16
2016-07-15
...
2016-06-23
**2016-08-11**

我不知道从哪里来2016-08-11。我按照下面的(xxxyyy)将25分解为24和-1 ,然后得到正确的日期2016-06-22

为什么xxx起作用但yyy不起作用?

Date xxx = new Date(new Date().getTime()-24 * 24 * 60 * 60 * 1000 -1 * 24 * 60 * 60 * 1000);
Date yyy = new Date(new Date().getTime()-25 * 24 * 60 * 60 * 1000);

这是我的代码:从i = 25起日期是错误的

for (int i=0; i<240;i++) {
    Date dt = new Date(new Date().getTime() - i * 24 * 60 * 60 * 1000);
    Log.e(TAG,Global.sdfDateTime19.format(dt));
}

问题答案:

您超出了的范围inti * 24 * 60 * 60 * 1000产生一个int(其然后从减去longgetDate)。

可以i是24,因为结果是2,073,600,000,小于一个int2,147,483,647 的最大正值。但是当到达时i = 25,您会回绕(如果不限制为int21.6亿,则值太大)。

只需将其long声明i为long或将24 a设置为乘法即可long

Date dt = new Date(new Date().getTime() - i * 24L * 60 * 60 * 1000);
// ---------------------------------------------^

为什么xxx有效,但yyy不有效?

因为您已将乘法分解为两部分 (为了清楚起见,我在其中添加了一个空格,因为-1否则看起来像是负数,而不是后面跟着的减法运算符1

Date xxx = new Date(new Date().getTime()-24 * 24 * 60 * 60 * 1000 - 1 * 24 * 60 * 60 * 1000);
// The first part -----------------------^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^^^^^^^^^^^^
// The second part ------------------------------------------------/

…而您将其拆分成两个部分的任何一个都不会溢出的范围int

通常,我不建议以这种方式操作日期,尤其是因为并非所有的日期都恰好有24小时(考虑进入和退出夏令时的日期)。我将使用一个库,该库可以让您在“日常”级别工作,例如Java
8 java.time或JodaTime或类似的东西。



 类似资料:
  • 问题内容: 为什么用Java将24 * 60 * 60 * 1000 * 1000除以24 * 60 * 60 * 1000不等于1000? 问题答案: 因为乘法会溢出32位整数。64位还可以: 显然,在乘法溢出之后,除法不会“撤消”该溢出。

  • 问题内容: 我试图通过乘以毫秒来计算30天,但是结果持续出现,结果是days_30的值是负数,我不确定为什么。 任何建议,不胜感激! 代码片段: days_30值导致:-1702967296 聚苯乙烯 结果较小(但仍为负数)。-1.702967296E9 问题答案: 您正在相乘,并且发生溢出,因为最大整数为。只有在乘法之后,它才会转换为。将第一个数字转换为。 或使用文字: 从一开始,这将迫使数学运

  • 问题内容: 我正在尝试计算(360/24)/ 60当我应该得到0.25时,我一直得到答案0.0 换句话说:我想将360除以24,然后将结果除以60 打印输出: 这是为什么?我是在做一些真正愚蠢的事情,还是有充分的理由呢? 问题答案: 算术中的所有操作数都不是浮点数-因此所有操作均使用整数算术完成,然后转换为浮点数。如果将适当的操作数的类型更改为浮点数,则可以正常工作: 请注意,如果仅将60更改为浮

  • 资本家总是把未来描述得相当美好。这一次,周总显然也错误地估计了形势。北京啊,毕竟是首都,大城市,他和陈董老想着把公司做大,从这里做到大城市,做到北京上海,再开分公司,再上市,上了市再开分公司…… 他这么想,于是也想当然地认为绝影会很乐意去北京,所以在跟他说这事的时候,他用了一种似乎是施舍的语气。 绝影当然不吃他这一套,过去两年中,他出差也去了不少地方,每次一回家就跟别人感叹:“还是四川好啊……”

  • 本文向大家介绍mysql获得60天前unix时间思路及代码,包括了mysql获得60天前unix时间思路及代码的使用技巧和注意事项,需要的朋友参考一下 首先根据now()获得当前时间 使用adddate()方法获得60天前时间 使用unix_timestamp()方法转换时间类型

  • irb(main):005:0>driver=Selenium::WebDriver.for:firefox Selenium::WebDriver::错误::WebDriver错误:无法在60秒内从C:/ruby21/lib/ruby/gems/2.1.0/gems/selenium-WebDriver-2.45.0/lib/Se Lenium/WebDriver/2.1.0/gems/sele