将以下格式的时间转换为小时。输入是时间格式可以数以下是任何类似的
1 hour 30 mins 20 secs 2 hrs 10 mins 45 mins
而我的输出将是:
1.5052.1670.75
方法一
您可以使用PeriodFormatterBuilder类和使用appendSuffix方法为每个字段定义单数和复数值的后缀:
import org.joda.time.Period;
import org.joda.time.format.PeriodFormatter;
import org.joda.time.format.PeriodFormatterBuilder;
/**
* 小时
*
* @param input
*/
public static void getPeriod(String input) {
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendHours().appendSuffix("hour", "hours") // 小时(单数和复数后缀)
.appendMinutes().appendSuffix("min", "mins")
.appendSeconds().appendSuffix("sec", "secs")
.toFormatter();
//删除空格并将“hr”更改为“hour”
Period p = formatter.parsePeriod(input.replaceAll(" ", "").replaceAll("hr", "hour"));
double hours = p.getHours();
hours += p.getMinutes() / 60d;
hours += p.getSeconds() / 3600d;
System.out.println(hours);
}
public static void main(String[] args) {
getPeriod("1 hour 30 mins 20 secs");
getPeriod("2 hrs 10 mins");
getPeriod("45 mins");
}输出:
1.5055555555555555 2.1666666666666665 0.75
方法二
另一种创建方法PeriodFormatter是使用appendSuffix正则表达式。当你有很多不同的后缀选项时(例如hour和hr时间字段),这是很有用的:
/**
* 小时
*
* @param input
*/
public static void getPeriod(String input) {
PeriodFormatter formatter = new PeriodFormatterBuilder()
.appendHours()
.appendSuffix(
new String[]{"^1$", ".*", "^1$", ".*"},
new String[]{" hour", " hours", " hr", " hrs"})
// optional space (if there are more fields)
.appendSeparatorIfFieldsBefore(" ")
.appendMinutes().appendSuffix(" min", " mins")
// optional space (if there are more fields)
.appendSeparatorIfFieldsBefore(" ")
.appendSeconds().appendSuffix(" sec", " secs")
.toFormatter();
// no need to call replaceAll (take input just as it is)
Period p = formatter.parsePeriod(input);
double hours = p.getHours();
hours += p.getMinutes() / 60d;
hours += p.getSeconds() / 3600d;
System.out.println(hours);
}请注意,我还添加appendSeparatorIfFieldsBefore(" ")了指示它在下一个字段之前有一个空格。
这个版本的好处是你不需要预处理输入:
// no need to call replaceAll (take input just as it is)Period p = formatter.parsePeriod(input);
输出与上面相同。
方法三、
Java 8日期时间API,使用这个java.time.Duration类:
public void getDuration(String input) {
// replace hour/min/secs strings for H, M and S
String adjusted = input.replaceAll("\\s*(hour|hr)s?\\s*", "H");
adjusted = adjusted.replaceAll("\\s*mins?\\s*", "M");
adjusted = adjusted.replaceAll("\\s*secs?\\s*", "S");
Duration d = Duration.parse("PT" + adjusted);
double hours = d.toMillis() / 3600000d;
System.out.println(hours);}//testsgetDuration("1 hour 30 mins 20 secs");getDuration("2 hrs 10 mins");getDuration("45 mins");输出是一样的。
PS:如果您的Java版本<= 7,则可以使用ThreeTen Backport。类名和方法是一样的,唯一的区别是包名:org.threeten.bp而不是java.time。
译文:https://stackoverflow.com/questions/44376970/convert-hours-mins-secs-string-to-hours
未经允许请勿转载:程序喵 » Java 将小时,分钟,秒转换为小时
程序喵