【发布时间】:2011-03-22 05:51:37
【问题描述】:
我需要在 java 中将分钟转换为小时和分钟。例如 260 分钟应该是 4:20。谁能帮我转换一下。
【问题讨论】:
-
24 小时制还是 12 小时制上午和下午?
标签: java
我需要在 java 中将分钟转换为小时和分钟。例如 260 分钟应该是 4:20。谁能帮我转换一下。
【问题讨论】:
标签: java
如果你的时间在一个名为t的变量中
int hours = t / 60; //since both are ints, you get an int
int minutes = t % 60;
System.out.printf("%d:%02d", hours, minutes);
再简单不过了
2021 年的附录:
请注意,这个答案是关于问题的字面意思:如何将分钟数转换为小时+分钟。它与时间、时区、AM/PM 无关......
如果您需要更好地控制这类事情,即您要处理的是时间点,而不仅仅是几分钟和几小时,请参阅下面的Basil Bourque's answer。
【讨论】:
Duration 实现这一点?
t 可以是<0(负数),那么第二行应该是int minutes = Math.abs(t) % 60;。
Duration.ofMinutes( 260L )
.toString()
PT4H20M
……或……
LocalTime.MIN.plus(
Duration.ofMinutes( 260L )
).toString()
04:20
Durationjava.time 类包括一对表示时间跨度的类。 Duration 类用于小时-分钟-秒,Period 用于年-月-日。
Duration d = Duration.ofMinutes( 260L );
Duration 部分通过调用to…Part 访问Duration 的每个部分。这些方法是在 Java 9 及更高版本中添加的。
long days = d.toDaysPart() ;
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
int seconds = d.toSecondsPart() ;
int nanos = d.toNanosPart() ;
然后您可以从这些部分组装您自己的字符串。
ISO 8601 标准定义了日期时间值的文本格式。对于未附加到时间线的时间跨度,standard format 是PnYnMnDTnHnMnS。 P 标志着开始,T 将年-月-日与小时-分钟-秒分开。所以一个半小时是PT1H30M。
java.time 类默认使用 ISO 8601 格式来解析和生成字符串。 Duration 和 Period 类使用这种特定的标准格式。所以只需致电toString。
String output = d.toString();
PT4H20M
对于替代格式,使用Duration::to…Part 方法在 Java 9 及更高版本(not 在 Java 8 中)构建您自己的字符串。或者参见this Answer 使用正则表达式来操作 ISO 8601 格式的字符串。
LocalTime我强烈建议使用标准的 ISO 8601 格式,而不是 04:20 这种极其模糊和令人困惑的时钟格式。但是如果你坚持,你可以通过使用LocalTime 类来获得这种效果。如果您的持续时间不超过 24 小时,则此方法有效。
LocalTime hackUseOfClockAsDuration = LocalTime.MIN.plus( d );
String output = hackUseOfClockAsDuration.toString();
04:20
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】:
Duration::to…Part 方法,显示了我对这个答案的编辑。您可以轻松地从这些部分组装自己的字符串。
使用java.text.SimpleDateFormat 将分钟转换为小时和分钟
SimpleDateFormat sdf = new SimpleDateFormat("mm");
try {
Date dt = sdf.parse("90");
sdf = new SimpleDateFormat("HH:mm");
System.out.println(sdf.format(dt));
} catch (ParseException e) {
e.printStackTrace();
}
【讨论】:
您也可以使用TimeUnit 类。你可以定义
private static final String FORMAT = "%02d:%02d:%02d";可以有这样的方法: 公共静态字符串解析时间(长毫秒){ 返回字符串.格式(格式, TimeUnit.MILLISECONDS.toHours(毫秒), TimeUnit.MILLISECONDS.toMinutes(毫秒) - TimeUnit.HOURS.toMinutes( TimeUnit.MILLISECONDS.toHours(毫秒)), TimeUnit.MILLISECONDS.toSeconds(毫秒) - TimeUnit.MINUTES.toSeconds( TimeUnit.MILLISECONDS.toMinutes(毫秒))); }
【讨论】:
我将此功能用于我的项目:
public static String minuteToTime(int minute) {
int hour = minute / 60;
minute %= 60;
String p = "AM";
if (hour >= 12) {
hour %= 12;
p = "PM";
}
if (hour == 0) {
hour = 12;
}
return (hour < 10 ? "0" + hour : hour) + ":" + (minute < 10 ? "0" + minute : minute) + " " + p;
}
【讨论】:
可以这样实现
int totalMinutesInt = Integer.valueOf(totalMinutes.toString());
int hours = totalMinutesInt / 60;
int hoursToDisplay = hours;
if (hours > 12) {
hoursToDisplay = hoursToDisplay - 12;
}
int minutesToDisplay = totalMinutesInt - (hours * 60);
String minToDisplay = null;
if(minutesToDisplay == 0 ) minToDisplay = "00";
else if( minutesToDisplay < 10 ) minToDisplay = "0" + minutesToDisplay ;
else minToDisplay = "" + minutesToDisplay ;
String displayValue = hoursToDisplay + ":" + minToDisplay;
if (hours < 12)
displayValue = displayValue + " AM";
else
displayValue = displayValue + " PM";
return displayValue;
} catch (Exception e) {
LOGGER.error("Error while converting currency.");
}
return totalMinutes.toString();
【讨论】:
(在 Kotlin 中)如果您要将答案放入 TextView 或其他内容中,您可以使用字符串资源:
<string name="time">%02d:%02d</string>
然后您可以使用此字符串资源在运行时设置文本:
private fun setTime(time: Int) {
val hour = time / 60
val min = time % 60
main_time.text = getString(R.string.time, hour, min)
}
【讨论】:
在几秒钟内给定输入,您可以像这样转换为 hh:mm:ss 格式:
int hours;
int minutes;
int seconds;
int formatHelper;
int input;
//formatHelper maximum value is 24 hours represented in seconds
formatHelper = input % (24*60*60);
//for example let's say format helper is 7500 seconds
hours = formatHelper/60*60;
minutes = formatHelper/60%60;
seconds = formatHelper%60;
//now operations above will give you result = 2hours : 5 minutes : 0 seconds;
我使用了 formatHelper,因为输入可以超过 86 400 秒,即 24 小时。
如果您希望输入的总时间由 hh:mm:ss 表示,则可以避免使用 formatHelper。
希望对你有帮助。
【讨论】:
input是7500,那么结果就是7500小时5分0秒,这显然是错误的。而且这个问题根本没有提到秒。
这是我将second,millisecond 转换为day,hour,minute,second 的函数
public static String millisecondToFullTime(long millisecond) {
return timeUnitToFullTime(millisecond, TimeUnit.MILLISECONDS);
}
public static String secondToFullTime(long second) {
return timeUnitToFullTime(second, TimeUnit.SECONDS);
}
public static String timeUnitToFullTime(long time, TimeUnit timeUnit) {
long day = timeUnit.toDays(time);
long hour = timeUnit.toHours(time) % 24;
long minute = timeUnit.toMinutes(time) % 60;
long second = timeUnit.toSeconds(time) % 60;
if (day > 0) {
return String.format("%dday %02d:%02d:%02d", day, hour, minute, second);
} else if (hour > 0) {
return String.format("%d:%02d:%02d", hour, minute, second);
} else if (minute > 0) {
return String.format("%d:%02d", minute, second);
} else {
return String.format("%02d", second);
}
}
测试
public static void main(String[] args) {
System.out.println("60 => " + secondToFullTime(60));
System.out.println("101 => " + secondToFullTime(101));
System.out.println("601 => " + secondToFullTime(601));
System.out.println("7601 => " + secondToFullTime(7601));
System.out.println("36001 => " + secondToFullTime(36001));
System.out.println("86401 => " + secondToFullTime(86401));
}
输出
60 => 1:00
101 => 1:41
601 => 10:01
7601 => 2:06:41
36001 => 10:00:01
86401 => 1day 00:00:01
希望对你有帮助
【讨论】:
Minutes mod 60 将给出剩余分钟数小时。
【讨论】:
int mHours = t / 60; //since both are ints, you get an int
int mMinutes = t % 60;
System.out.printf("%d:%02d", "" +mHours, "" +mMinutes);
【讨论】:
%d来格式化字符串值"" +mHours和"" +mMinutes?
long d1Ms=asa.getTime();
long d2Ms=asa2.getTime();
long minute = Math.abs((d1Ms-d2Ms)/60000);
int Hours = (int)minute/60;
int Minutes = (int)minute%60;
stUr.setText(Hours+":"+Minutes);
【讨论】:
试试这个代码:
import java.util.Scanner;
public class BasicElement {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int hours;
System.out.print("Enter the hours to convert:");
hours =input.nextInt();
int d=hours/24;
int m=hours%24;
System.out.println(d+"days"+" "+m+"hours");
}
}
【讨论】:
import java.util.Scanner;
public class Time{
public static void main(String[]args){
int totMins=0;
int hours=0;
int mins=0;
Scanner sc= new Scanner(System.in);
System.out.println("Enter the time in mins: ");
totMins= sc.nextInt();
hours=(int)(totMins/60);
mins =(int)(totMins%60);
System.out.printf("%d:%d",hours,mins);
}
}
【讨论】: