Date 如何将毫秒转换为天、小时、分钟
我试着这样做:Date 如何将毫秒转换为天、小时、分钟,date,time,minecraft,bukkit,milliseconds,Date,Time,Minecraft,Bukkit,Milliseconds,我试着这样做: long Plptime = player.getStatistic(Statistic.PLAY_ONE_TICK)*50L; //from ticks to ms(1 tick (20 each sec) by 50 gives aprox the ms) SimpleDateFormat formatter = new SimpleDateFormat("dd 'days,' HH 'hours and' mm 'minu
long Plptime = player.getStatistic(Statistic.PLAY_ONE_TICK)*50L; //from ticks to ms(1 tick (20 each sec) by 50 gives aprox the ms)
SimpleDateFormat formatter = new SimpleDateFormat("dd 'days,' HH
'hours and' mm 'minutes'", Locale.getDefault());
Date date = new Date(Plptime);
String result1 = formatter.format(date);
但是当它向玩家(顺便说一句,minecraft)发送字符串消息时,小时和天从1开始,而分钟从0开始,例如,当某人刚刚加入他的游戏时,时间将是01天01小时00分钟。有解决方案吗?谢谢Java 9或更高版本
让我们首先声明几个有用的常量
private static final int TICKS_PER_SECOND = 20;
public static final Duration ONE_TICK = Duration.ofSeconds(1).dividedBy(TICKS_PER_SECOND);
现在做:
int ticks = player.getStatistic(Statistic.PLAY_ONE_TICK);
Duration plpTime = ONE_TICK.multipliedBy(ticks);
String result1 = String.format(Locale.ENGLISH, "%02d days %02d hours and %02d minutes",
plpTime.toDays(), plpTime.toHoursPart(), plpTime.toMinutesPart());
System.out.println(result1);
这打印出一个字符串,就像
00天17小时08分
可能每秒滴答声的数量(20)已经在Bukkit的某个地方声明为常量,我不知道。如果是的话,就拿那一个,而不是你自己的
Java 6、7或8
我使用的toxxpart
方法是在Java9中引入的。如果没有它们,我们需要像这样计算各个部分:
long days = plpTime.toDays();
plpTime = plpTime.minusDays(days);
long hours = plpTime.toHours();
plpTime = plpTime.minusHours(hours);
long minutes = plpTime.toMinutes();
String result1 = String.format(Locale.ENGLISH, "%02d days %02d hours and %02d minutes",
days, hours, minutes);
结果与上述相同
问题:在Java6或Java7中如何工作?
我使用的Duration
类是现代java日期和时间APIjava.time
的一部分
- 在Java8和更高版本中,以及在更新的Android设备上(我听说是从API级别26开始)
是内置的Java.time
- 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
导入日期和时间类org.threeten.bp
日期
时,你会得到一个时间点,即1970年1月1日00:00 UTC定义的纪元之后的许多毫秒(从概念上讲,当问题是玩家何时加入时,这是相当误导的)。如果您所在的时区在1970年冬季比UTC早1小时(例如,像中欧时间),则在该纪元已经是1点钟了,因此从那时开始计算小时数
因为是1月1日,这一天当然是1。奇怪的是,如果你在格林尼治标准时间以西的一个时区(举一个例子,美国/洛杉矶),日期仍然是1969年12月31日,也就是纪元后的第一个小时,因此新加入的玩家可能在那里呆了31天16小时00分钟
链接
- 解释如何使用
java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天我们在中有了更好的内容。非常感谢您的详细解释,它是有效的。我会注意到Minecraft(问题标记为)仍然不在Java9上,但这是一个非常好的一般性答案。