我的代码: 注意:为简洁起见,省略了一些代码,请查看下面的注释以获得代码的一些解释
// the current date and time
Calendar today = Calendar.getInstance();
// release.date is in milliseconds at 12am and in GMT, example: GMT: Friday, September 29, 2017 12:00:00 AM
long currentTimeMillis = today.getTimeInMillis();
long expiryTime = releaseDate.date - currentTimeMillis;
holder.mTextCountdown.setText("");
if (holder.timer != null) {
// Cancel if not null to stop flickering
holder.timer.cancel();
}
holder.timer = new CountDownTimer(expiryTime, 500) {
public void onTick(long millisUntilFinished) {
long seconds = millisUntilFinished / 1000; // reminder: 1 sec = 1000 millis
long minutes = seconds / 60;
long hours = minutes / 60;
long days = hours / 24;
String dayFormat = "days";
String hoursFormat = "hours";
if (days == 1) {
dayFormat = "day";
}
if (hours == 1) {
hoursFormat = "hour";
}
String time = days + " " + dayFormat + " : " + hours % 24 + " " + hoursFormat +" : " + minutes % 60 + " : " + seconds % 60;
holder.mTextCountdown.setText(time);
}
// Finished: counted down to 0
public void onFinish() {
holder.mTextCountdown.setText("Now out!");
}
}.start();
如何计算GMT / UTC中的计时器,对于每个用户,它肯定会同时结束?
谢谢
答案 0 :(得分:2)
使用现代java.time类而不是麻烦的旧Calendar
/ Date
类。对于Android,请参阅下面的最后一个项目符号。
说你的电影将于9月23日洛杉矶时间下午5点发布。
LocalDate ld = LocalDate.of( 2017 , 9 , 23 ) ;
LocalTime lt = LocalTime.of( 17 , 0 ) ;
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
将其转换为UTC,Instant
对象。
Instant instant = zdt.toInstant() ; // Convert from a time zone to UTC. Same point on the timeline.
计算到那时为止的时间,为Duration
。
Duration d = Duration.between( Instant.now() , instant ) ;
提取您的毫秒数。
long millis = d.toMillis() ;
也许您想向魁北克的用户展示电影发布日期时间。
ZonedId zUser = ZoneId.of( "America/Quebec" ) ;
ZonedDateTime zdtUser = instant.atZone( zUser ) ; // Adjust into user’s time zone. Some point on the timeline.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( Locale.CANADA_FRENCH ) ;
String output = zdtUser.format( f ) ;
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:1)
我建议你做两件事: