【问题标题】:System.currentTimeMillis() in android?Android中的System.currentTimeMillis()?
【发布时间】:2012-03-20 10:29:22
【问题描述】:

我在我的项目中遇到了System.currentTimeMillis() 的问题,我在这里写了一些我遇到问题的代码

Date currentDate = new Date(System.currentTimeMillis());
Log.v("1st",""+currentDate);    
Date currentDate = new Date(System.currentTimeMillis()+25*24*60*60*1000);
Log.v("2nd","25th"+currentDate);

它在第一个日志中显示当前日期,但我在当前日期添加 25 天,它在第二个日志中,但它不工作它显示 2 个月前的一天。它在 1*24*60*60*1000 到 24*24*60*60*1000 天之间工作得很好。24 天后它不工作请解决我的问题

提前致谢

【问题讨论】:

  • 您能否将 +24 添加到您的代码中作为第 3 个并粘贴打印出来。

标签: android date


【解决方案1】:

25*24*60*60*1000>整数.MAX_VALUE, 你应该写如下:

new Date(System.currentTimeMillis()+25*24*60*60*1000l);

【讨论】:

  • 虽然这篇文章不是最优雅的解决方案,但 java.koma 准确地回答了所问的问题 - 没有理由拒绝他,但他在回答中带来了有趣的一点。
【解决方案2】:

改用Calendar

    Calendar rightNow = Calendar.getInstance()
    rightNow.add(Calendar.DAY_OF_YEAR, 25)

你可以得到日期对象

【讨论】:

    【解决方案3】:

    您正在混合整数和长整数。我的 java 有点生锈了,但是试试:

    Date currentDate = new Date(System.currentTimeMillis()+25L*24L*60L*60L*1000L);
    

    【讨论】:

    • 这是正确答案,25*24*60*60*1000 是整数所能容纳的更多。
    • 谢谢你它正在工作我能知道你的确切原因吗?你加L
    • 嗨。这是因为 25*24*60*60*1000 部分的计算是用 int 值进行的,但是那个特定的乘积超过了可以存储在 32 位中的最大值,所以发生了算术溢出。在每个数字的末尾加上 L 表示将其读取为 long 值(64 位),并将计算结果作为 long 存储。现在我们有足够的空间来存储结果并且避免了溢出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多