我从午夜开始有几分钟。
例如,3Am表示为= 180
(使用3*60
找到)
现在我需要将其转换为24
小时时间格式HH24 :mm
= 03:00
我们如何才能使用简单的日期格式化程序/日历?
答案 0 :(得分:3)
我会使用数学,强制日期时间库这样做不会更简单(因为它预计毫秒和时区)
int mins = 180;
String hhmm = String.format("%02d:%02d", mins / 60, mins % 60);
与Calendar做同样的事情(可以处理夏令时)
int mins = 180;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, mins/60);
cal.set(Calendar.MINUTE, mins % 60);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm");
String hhmm = sdf.format(cal.getTime());
System.out.println(hhmm);
打印
03:00
然而,在夏令时变化的日子里,你可以得到02:00或04:00
答案 1 :(得分:0)
answer by Peter Lawrey是正确的,按照惯例。
我的附加价值是给出一个替代库Joda-Time的例子,作为java.util.Date& .Calendar类是众所周知的麻烦,应该避免。
Joda-Time和java.time package中的新Java 8(受Joda-Time启发)提供LocalTime
类来表示仅限时间而没有任何日期或时区。这听起来适用于您的需求。
只是非常确定您不需要超过LocalTime。如果此数据是指自巴黎午夜以来的分钟数,并且您可能混合使用代表纽约或奥克兰的日期时间的其他数据,那么您应该使用DateTime
类而不是LocalTime。那些认为/希望忽视时区会让事情变得简单的天真程序员会遇到大麻烦。
Joda-Time 2.4中的一些示例代码。
// Input
int minutes = 180;
int millisecondsSinceAnyMidnight = ( minutes * 60 * 1000 );
LocalTime localTime = LocalTime.fromMillisOfDay( millisecondsSinceAnyMidnight );
// Output
String outputDefault = localTime.toString();
DateTimeFormatter formatter = DateTimeFormat.forPattern( "HH:mm" );
String outputHHMM = formatter.print( localTime );
// Dump to console.
System.out.println( "outputDefault: " + outputDefault );
System.out.println( "outputHHMM: " + outputHHMM );
跑步时。
outputDefault: 03:00:00.000
outputHHMM: 03:00