将分钟从午夜转换为24小时制

时间:2014-07-27 17:37:08

标签: java simpledateformat

我从午夜开始有几分钟。

例如,3Am表示为= 180(使用3*60找到)

现在我需要将其转换为24小时时间格式HH24 :mm = 03:00

我们如何才能使用简单的日期格式化程序/日历?

2 个答案:

答案 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