Android 计算不含Joda时间的还押日期

Android 计算不含Joda时间的还押日期,android,date,time,calendar,Android,Date,Time,Calendar,我花了一个小时浏览stackoverflow,试图找到一种不使用JODA Time计算剩余天数、小时、分和秒的正确方法。我希望事情尽可能简单 我正在寻求执行以下操作(请提供实例声明,我不确定是否向我们发送长时间、时间或日历对象等): 然后使用DD:HH:MM:SS格式将textView设置为剩余时间 换句话说,最好的方法是什么?(时区不重要)如何将结束日期设置为例如2013年12月31日,以及我的结束日期是什么类型?它是时间、日期还是日历对象?然后,我想从结束日期中减去当前日期,以显示截至201

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

我正在寻求执行以下操作(请提供实例声明,我不确定是否向我们发送长时间、时间或日历对象等):

然后使用DD:HH:MM:SS格式将textView设置为剩余时间

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


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

我将让您研究如何划分
差异
变量以获得天数、小时数等。但接下来我会这样做

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);
}

您希望如何处理对本地时区的夏令时更改?没有这些,从“毫秒差”到“天、小时、分钟、秒差”相当简单。@JonSkeet将使用Time currentTime=新时间(Time.getCurrentTimezone());合适吗?如何创建EndingDate?例如,是否将endingDate设置为2013年12月31日?“如果我看起来很困惑,请原谅,现在是凌晨2点。”我澄清了我的问题。非常感谢。这似乎是我需要的。谢谢你的帮助。我将在明天将其放在我的代码字符串days=“days Left:”+(差/(1000*60*60*24))中后,将其标记为答案;给我60天的回报。它应该在30天内返回。你知道为什么吗?解决了这个问题。它应该是endCalendar.set(2013,11,31,10,15,30);月份从0开始。@challengeacepted:啊……很抱歉。是的,我忘记了一些日期/时间字段是零基的。很高兴你解决了这个问题。
public long getUTCTimeInMillis(long localTimeInMillis) {
    return localTimeInMillis - TimeZone.getDefault().getRawOffset() - (TimeZone.getDefault().inDaylightTime(new Date(localTimeInMillis)) ? TimeZone.getDefault().getDSTSavings() : 0);
}