这是我的TimeInterval类:
public class TimeInterval {
private int fTime;
private int sTime;
public TimeInterval(int fTime, int sTime) {
if(fTime < 0 || fTime > 2400 || sTime < 0 || sTime > 2400) {
System.out.println("Illegal times, must be < 2400 and > 0)");
System.exit(0);
} else {
this.fTime = fTime;
this.sTime = sTime;
}
}
public int getHours() {
return Math.abs((fTime - sTime) / 100);
}
public int getMinutes() {
return Math.abs((fTime - sTime) % 100);
}
public double getDecimalTime() {
return getHours() + ((double) getMinutes() / 60);
}
}
Run Code Online (Sandbox Code Playgroud)
和我的测试人员班:
import java.util.*;
public class TestTimeInterval {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("Please enter the first time: ");
int fTime = s.nextInt();
System.out.print("Please enter the second time: ");
int sTime = s.nextInt();
TimeInterval t = new TimeInterval(fTime, sTime);
System.out.printf("%s: %2d hours %2d minutes \n", "Elapsed time in hrs/min ", t.getHours(), t.getMinutes());
System.out.printf("%s: %.2f", "Elapsed time in decimal", t.getDecimalTime());
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它正确地计算了一定的时间,但是如果我输入例如0150和0240,差异应该是50分钟,而是显示90,我需要使它不超过60,并将剩余部分转换为小时和分钟.如果我输入其他一些数字,它就可以了.任何帮助表示赞赏.
Bas*_*que 15
Duration
.between(
LocalTime.parse( "0150" , DateTimeFormatter.ofPattern( "HHmm" ) ) ,
LocalTime.parse( "0240" , DateTimeFormatter.ofPattern( "HHmm" ) )
)
.toString()
Run Code Online (Sandbox Code Playgroud)
PT50M
也许你只是在做作业.如果是这样,请在您的问题中明确说明.
但是您应该知道Java为此提供了类.
现代方法使用java.time类.默认情况下,这些类以24小时制运行.
LocalTime对于没有日期且没有时区的时间,请使用LocalTime.
LocalTime start = LocalTime.of( 1 , 50 );
LocalTime stop = LocalTime.of( 2 , 40 );
Run Code Online (Sandbox Code Playgroud)
Duration将经过的时间计算为Duration.
Duration d = Duration.between( start , stop );
Run Code Online (Sandbox Code Playgroud)
生成表示该Duration值的文本.默认情况下,使用标准ISO 8601格式.
System.out.println( d );
Run Code Online (Sandbox Code Playgroud)
PT50M
如果需要,您可以提取零件.
int hours = d.toHoursPart() ;
int minutes = d.toMinutesPart() ;
Run Code Online (Sandbox Code Playgroud)
要解析用户提供的HHMM格式,请使用DateTimeFormatter.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "HHmm" ) ;
LocalTime lt = LocalTime.parse( "0150" , f ) ;
Run Code Online (Sandbox Code Playgroud)
请注意,仅在没有日期和时区背景的情况下处理时间可能会导致错误的结果.如果在UTC工作,没问题.但是,如果您的时间值实际上是为了表示特定区域的挂钟时间,那么LocalTime仅使用夏令时(DST)等异常将被忽略.在你的例子中,如果在美国的DST切换日期发生,可能没有两点钟,或者两点钟已经重复.
如果您隐含意图使用时区,请通过应用a ZoneId来获取ZonedDateTime对象.
LocalDate ld = LocalDate.of( 2018 , 1 , 23 ) ;
ZoneId z = ZoneId.of( "America/Los_Angeles" ) ;
ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z );
…
Duration d = Duration.between( zdt , laterZdt ) ;
Run Code Online (Sandbox Code Playgroud)
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
我已经回答了我自己的问题,解决方案是我将小时与分钟部分分开(例如 1159 到 11 和 59),将小时相乘以获得分钟并将其添加到其余分钟中。
this.fTimeInMin = ((fTime / 100) * 60) + (fTime % 100);
this.sTimeInMin = ((sTime / 100) * 60) + (sTime % 100);
Run Code Online (Sandbox Code Playgroud)
然后,在getHours()andgetMinutes()方法中将分钟转换为小时和分钟:
public int getHours() {
return Math.abs((this.fTimeInMin - this.sTimeInMin) / 60);
}
public int getMinutes() {
return Math.abs((this.fTimeInMin - this.sTimeInMin) % 60);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
715 次 |
| 最近记录: |