我正在使用一个API,该API会提取所有即将上映的电影,并且api中的所有日期都以毫秒为单位存储,当我尝试从今天的日期倒计时到电影的发行日期时,倒数是在我的本地时区。例如,我在东海岸,当倒数计时到晚上8点时,就算是新的一天,剩下的天数就会减少
以下是屏幕截图:
如您所见,这是东海岸的晚上9点左右的倒计时,所以晚上8点还剩24小时,我该如何更改?当然,我希望它在午夜而不是晚上8点重置一天。谢谢!
这是我的代码:
public long getMillisInGMT(long date) {
// We don't care what date format we're going to format to
SimpleDateFormat formatter = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
formatter.setTimeZone(TimeZone.getTimeZone("GMT"));
String formatted = formatter.format(new Date(date));
try {
return formatter.parse(formatted).getTime();
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
public void initCountdown(_Release release) {
long releaseDate = release.getDate();
long timeTillRelease = getMillisInGMT(releaseDate) - getMillisInGMT(Calendar.getInstance().getTimeInMillis());
mCountdownTimer = new CountDownTimer(timeTillRelease, 1000) { // adjust the milli seconds here
public void onTick(long millisUntilFinished) {
// 1 sec = 1000 millis
long seconds = millisUntilFinished / 1000;
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
mDaysTxt.setText(String.valueOf(days));
mHoursText.setText(String.valueOf(hours % 24));
mMinutesText.setText(String.valueOf(minutes % 60));
mSecondsText.setText(String.valueOf(seconds % 60));
}
public void onFinish() {
mHeaderReleasesTitle.setText("Released on");
mOutNowTxt.setVisibility(View.VISIBLE);
mCountdownLayout.setVisibility(View.GONE);
}
};
mCountdownTimer.start();
}
答案 0 :(得分:1)
我不是100%知道您的错误出处,但是我知道使用日期和日历库遇到了很多问题。到目前为止,最好的时间库是Joda-Time库。如果是我,我将替换该库,看看是否可以解决问题,然后再进行进一步的故障排除。
要获取当前的UTC(GMT)时间,您可以使用DateTime库,如下所示:
DateTime.now().withZone(DateTimeZone.UTC)
要将Release millis转换为UTC,可以使用如下所示的DateTime库:
new DateTime(dateInMillis).withZone(DateTimeZone.UTC);
我知道这不是您问题的直接答案,但是我无法告诉您使用日期和日历库时遇到了多少奇怪的问题。 Joda-Time解决了大多数问题。这是一个了不起的图书馆。