Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java时间转换_Java_Time - Fatal编程技术网

Java时间转换

Java时间转换,java,time,Java,Time,我也尝试了一种不同的算法,用减法代替模 3719 1:1:59 3720 1:1:0 7325 1:1:0 Scanner input2=新的扫描仪(System.in); System.out.println(“转换为hh:mm:ss:”)的时间; int time=input2.nextInt(); int hr=0,min=0,sec=0; 如果(时间>=3600) { hr++; 时间-=3600; } 如果(时间>=60) { 时间-=60; min++; } 如果(时间=360

我也尝试了一种不同的算法,用减法代替模

3719
1:1:59

3720
1:1:0

7325
1:1:0
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600)
{
hr++;
时间-=3600;
}
如果(时间>=60)
{
时间-=60;
min++;
}
如果(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);

这是因为在
最小值中使用3600的模数:

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
if(time >= 3600)
{
   hr ++;
   time -=3600;
}
if(time >= 60)
{
    time -= 60;
    min ++;
}
if (time <  60)
{
    sec  +=  time;
}
System.out.println(hr+":"+min+":"+sec);
但您必须使用60,将其更改为:

if (time >= 60) {
    min = time / 60;
    time = time % 3600;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入2=新扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600){
hr=时间/3600;
时间=时间%3600;
}
如果(时间>=60){
min=时间/60;
时间=时间%60;
}
如果(时间<60){
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
}
它会像你期望的那样工作


在这里检查它

这是因为您在
min
中使用3600的模数:

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
if(time >= 3600)
{
   hr ++;
   time -=3600;
}
if(time >= 60)
{
    time -= 60;
    min ++;
}
if (time <  60)
{
    sec  +=  time;
}
System.out.println(hr+":"+min+":"+sec);
但您必须使用60,将其更改为:

if (time >= 60) {
    min = time / 60;
    time = time % 3600;
}
publicstaticvoidmain(字符串[]args){
扫描仪输入2=新扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
如果(时间>=3600){
hr=时间/3600;
时间=时间%3600;
}
如果(时间>=60){
min=时间/60;
时间=时间%60;
}
如果(时间<60){
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
}
它会像你期望的那样工作


在这里检查它

让我们避免重新发明轮子,只需使用适当的图案作为下一步:

public static void main(String[] args) {
    Scanner input2 = new Scanner(System.in);
    System.out.println("Time to be converted to hh:mm:ss: ");
    int time = input2.nextInt();
    int hr = 0, min = 0, sec = 0;
    if (time >= 3600) {
        hr = time / 3600;
        time = time % 3600;
    }
    if (time >= 60) {
        min = time / 60;
        time = time % 60;
    }
    if (time < 60) {
        sec += time;
    }
    System.out.println(hr + ":" + min + ":" + sec);
}

让我们避免重新发明轮子,只需使用适当的模式,如下所示:

public static void main(String[] args) {
    Scanner input2 = new Scanner(System.in);
    System.out.println("Time to be converted to hh:mm:ss: ");
    int time = input2.nextInt();
    int hr = 0, min = 0, sec = 0;
    if (time >= 3600) {
        hr = time / 3600;
        time = time % 3600;
    }
    if (time >= 60) {
        min = time / 60;
        time = time % 60;
    }
    if (time < 60) {
        sec += time;
    }
    System.out.println(hr + ":" + min + ":" + sec);
}
您的第二个算法可以工作,尽管它应该使用
while
而不是
if
,这样它可以多次递增

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
// Create the formater
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
// Multiply the time in sec by 1000 to get milliseconds
// Then convert the total amount of milliseconds into a Date
// And finally format the date
System.out.println(format.format(new Date(time * 1000L)));
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
而(时间>=3600)
{
hr++;
时间-=3600;
}
而(时间>=60)
{
时间-=60;
min++;
}
同时(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
您的第二个算法可以工作,尽管它应该使用
while
而不是
if
,以便它可以多次递增

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
// Create the formater
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss");
// Multiply the time in sec by 1000 to get milliseconds
// Then convert the total amount of milliseconds into a Date
// And finally format the date
System.out.println(format.format(new Date(time * 1000L)));
Scanner input2=新的扫描仪(System.in);
System.out.println(“转换为hh:mm:ss:”)的时间;
int time=input2.nextInt();
int hr=0,min=0,sec=0;
而(时间>=3600)
{
hr++;
时间-=3600;
}
而(时间>=60)
{
时间-=60;
min++;
}
同时(时间<60)
{
秒+=时间;
}
系统输出打印项次(hr+“:“+min+”:“+sec);
而不是:

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
while(time >= 3600)
{
    hr++;
    time -= 3600;
}
while(time >= 60)
{
    time -= 60;
    min++;
}
while(time <  60)
{
    sec += time;
}
System.out.println(hr+":"+min+":"+sec);
应该有:

if(time >= 60)
{
    time = time%3600;
    min = time/60;
}
也可以跳过if条件并添加前导零:

if(time >= 60)
{
    min = time/60;
    time = time%60;

}
而不是:

Scanner input2 = new Scanner(System.in);
System.out.println("Time to be converted to hh:mm:ss: ");
int time = input2.nextInt();
int hr = 0, min = 0, sec = 0;
while(time >= 3600)
{
    hr++;
    time -= 3600;
}
while(time >= 60)
{
    time -= 60;
    min++;
}
while(time <  60)
{
    sec += time;
}
System.out.println(hr+":"+min+":"+sec);
应该有:

if(time >= 60)
{
    time = time%3600;
    min = time/60;
}
也可以跳过if条件并添加前导零:

if(time >= 60)
{
    min = time/60;
    time = time%60;

}
tl;博士 PT2H2M5S

细节 答案是正确的,解决了数学问题

仅供参考,java.time类可以为您完成这项数学工作

ISO 8601 此外,不建议以
hh:mm:ss
格式将时间跨度作为字符串进行跟踪。这种格式会产生歧义,因为它看起来像一天中的某个时间。该标准为日期时间值定义了许多合理的明确格式。一段时间内未附加到时间线的时间称为:
PnYnMnDTnHnMnS
P
标记开始,而
T
将年、月、日和时、分、秒分开。例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。一分钟半是
PT1M30S

在解析/生成字符串时,java.time类默认使用ISO 8601格式

java.time.Duration
java.time中的
Duration
类表示总秒数的时间跨度和纳秒数的小数点

Duration.ofSeconds ( 7_325L ).toString()
PT1H1M59S

接下来是一个更大的数字

Duration d = Duration.ofSeconds( 3_719L );
String output = d.toString();
PT2H2M5S

在Java8中,这个类莫名其妙地缺少用于不同部分的getter方法,例如小时数、分钟数和秒数。通过添加
getPart
方法在Java9中进行了修正

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如
java.util.date
.Calendar
,&
java.text.SimpleDateFormat

该项目现已启动,建议迁移到java.time

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释

大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)

该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如
Interval
YearWeek
YearQuarter
,等等;博士 PT2H2M5S

细节 答案是正确的,解决了数学问题

仅供参考,java.time类可以为您完成这项数学工作

ISO 8601 此外,不建议以
hh:mm:ss
格式将时间跨度作为字符串进行跟踪。这种格式会产生歧义,因为它看起来像一天中的某个时间。该标准为日期时间值定义了许多合理的明确格式。一段时间内未附加到时间线的时间称为:
PnYnMnDTnHnMnS
P
标记开始,而
T
将年、月、日和时、分、秒分开。例如,“P3Y6M4DT12H30M5S”报告