【问题标题】:Calculate Remaning Date Without Joda Time计算没有 Joda 时间的剩余日期
【发布时间】:2013-12-01 09:53:57
【问题描述】:

我花了一个小时浏览 stackoverflow,试图找到一种正确的方法来计算剩余的天数、小时、分钟和秒数,而不使用 JODA-Time。我希望让事情尽可能简单。

我正在寻求执行以下操作(请提供实例声明,我不确定是否对我们来说是 Longs、Time 或 Calendar 对象等):

difference =  endingDate-currentTime

然后将一个textView设置为DD:HH:MM:SS格式的剩余时间

换句话说,最好的方法是什么? (时区不重要)如何将结束日期设置为例如 2013 年 12 月 31 日,我的结束日期是什么类型?它是时间、日期还是日历对象?然后我想从我的结束日期中减去我的当前日期,以显示到 2013 年 12 月 31 日的剩余天数。格式为 DD:HH:MM:SS

谢谢!非常感谢您的帮助。

【问题讨论】:

  • 您想如何处理对本地时区的夏令时更改?没有它,从“以毫秒为单位的差异”到“以天、小时、分钟、秒为单位的差异”是相当简单的。
  • @JonSkeet 将使用时间 currentTime = new Time(Time.getCurrentTimezone());合适吗?我将如何创建 EndingDate?例如,将endingDate 设置为12/31/2013?如果我看起来很困惑,请原谅我,现在是凌晨 2 点。
  • @JonSkeet 我澄清了我的问题。谢谢!

标签: android date time calendar


【解决方案1】:

我会留给你计算如何将difference 变量除以得到天数、小时数等。但这就是我接下来要做的事情。

Calendar endCalendar = new Calendar();

// Set end to 31th Dec 2013 10:15:30 am local time
endCalendar.set(2013, 11, 31, 10, 15, 30);

long localEndTimeInMillis = endCalendar.getTimeInMillis();
long localCurrentTimeInMillis = Calendar.getInstance().getTimeInMillis();

// Convert to UTC.
// Easy way to compensate if the current and end times are in different DST times
utcEndTimeInMillis = getUTCTimeInMillis(localEndTimeInMillis);
utcCurrentTimeInMillis = getUTCTimeInMillis(localCurrentTimeInMillis);

long difference = utcEndTimeInMillis - utcCurrentTimeInMillis;

转换为UTC的方法...

public long getUTCTimeInMillis(long localTimeInMillis) {
    return localTimeInMillis - TimeZone.getDefault().getRawOffset() - (TimeZone.getDefault().inDaylightTime(new Date(localTimeInMillis)) ? TimeZone.getDefault().getDSTSavings() : 0);
}

【讨论】:

  • 这似乎是我需要的,谢谢你的帮助。明天我会将其标记为答案,然后将其放入我的代码中
  • String days = "剩余天数:"+(difference/(1000 * 60 * 60 * 24));给我60天的回报。当它应该返回 30 天。关于为什么的任何想法?
  • 解决了这个问题。它应该是 endCalendar.set(2013, 11, 31, 10, 15, 30);月份以 0 开头。
  • @ChallengeAccepted :啊……对不起。是的,我忘记了某些日期/时间字段是从零开始的。很高兴你设法解决它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
相关资源
最近更新 更多