2017-03-08 82 views
0

所以,我有一些代码,通过使用System.currentTimeMillis();语句做一大堆东西来确定日期。然而,我一直有代码问题,尽管我可以正确显示月份和日期,但是这一年总是比未来2年(例如:如果是1970年,我的代码将显示1972年等)。虽然插入一个从计算年份减去2年的声明会更容易,但我希望它能够可靠地计算年份。但是,唉,我找不到导致此错误的问题。如果任何人都可以帮助我,这将不胜感激。代码如下。请求日期显示的帮助

import java.io.*; 
import java.util.*; 

public class fancyClock { 
public static void main(String[] args) { 
int counter = 1; 
int year = 1970; 
boolean isLeapYear = false; 
int yearsUntilLeapYear = 2; 
int days = 0; 
int daysTemp = 0; 
int months = 1; 
String month = ""; 
int hours = 24; 
int minutes = 00; 
int day = 0; 


long millis = System.currentTimeMillis(); 
System.out.println(millis); 

while (counter == 1) { 
    if (millis - 86400000 > 0) { 
    days++; 
    millis = millis - 86400000; 
    } else { 
    counter--; 
    } 
} 
counter++; 
daysTemp = days; 
while (counter == 1) { 
    year++; 
    yearsUntilLeapYear--; 
if (yearsUntilLeapYear == 0) { 
    isLeapYear = true; 
} 
    // ESSENTIAL!!! IF COND MUST BE MOD, NOT MINUS!!! 
    if (daysTemp % 365 > 0 && isLeapYear == false) { 
    daysTemp = daysTemp - 365; 
    } else if (daysTemp % 366 > 0 && isLeapYear == true) { 
    isLeapYear = false; 
    yearsUntilLeapYear = 4; 
    daysTemp = daysTemp - 366; 
    } else { 
    counter--; 
    } 
} 
counter++; 
if (isLeapYear == true) { 
    daysTemp = daysTemp + 366; 
} else if (isLeapYear == false) { 
    daysTemp = daysTemp + 365; 
} 
System.out.println("Days after flip: " + daysTemp); 

while (counter == 1) { 
    if ((months == 1 && (daysTemp - 31 > 0)) || (months == 3 && (daysTemp - 31 > 0)) || (months == 5 && (daysTemp - 31 > 0)) || (months == 7 && (daysTemp - 31 > 0)) || (months == 8 && (daysTemp - 31 > 0)) || (months == 10 && (daysTemp - 31 > 0)) || (months == 12 && (daysTemp - 31 > 0))) { 
    daysTemp = daysTemp - 31; 
    months++; 
    } else if (months == 2 && isLeapYear == true && (daysTemp - 29 > 0)) { 
    daysTemp = daysTemp - 29; 
    months++; 
    } else if (months == 2 && isLeapYear == false && (daysTemp - 28 > 0)) { 
    daysTemp = daysTemp - 28; 
    months++; 
    } else if ((months == 4 && (daysTemp - 30 > 0)) || (months == 6 && (daysTemp - 30 > 0)) || (months == 9 && (daysTemp - 30 > 0)) || (months == 11 && (daysTemp - 30 > 0))) { 
    daysTemp = daysTemp - 30; 
    months++; 
    } else { 
    counter--; 
    } 
} 

if (months == 1) { 
    month = "January"; 
} else if (months == 2) { 
    month = "Febuary"; 
} else if (months == 3) { 
    month = "March"; 
} else if (months == 4) { 
    month = "April"; 
} else if (months == 5) { 
    month = "May"; 
} else if (months == 6) { 
    month = "June"; 
} else if (months == 7) { 
    month = "July"; 
} else if (months == 8) { 
    month = "August"; 
} else if (months == 9) { 
    month = "September"; 
} else if (months == 10){ 
    month = "October"; 
} else if (months == 11){ 
    month = "November"; 
} else { 
    month = "December"; 
} 
day = daysTemp; 


System.out.println("FANCY CLOCK BETA"); 
System.out.println("Current date: " + month + " " + day + ", " + year); 


} 
} 
+0

好,我不明白你的逻辑可言。 'while(counter == 1){++} {++};' –

+0

这只是一个正常的循环。保持代码运行,直到代码处理完所有内容。 – gnimmargorP

+0

@gnimmargorP确保你的类名遵循PascalCase而不是camelCase。 https://en.wikipedia.org/wiki/PascalCase –

回答

0

试试这个:

,我没有做它的工作几乎没有变化:

  • 你一天中显示是不正确的,因为它是初始化为0,它应该是1,因为我们有从1970年1月1日开始

  • 正如你想考虑1970年的计算,你将不得不在1969年初始化年份,这样你就可以在你的计算逻辑中考虑1970年。

  • 此外,++应该只发生在当天时间标准365或366天的标准。

我发在下面的代码,这些变化,并与输出运行它:

Days after flip: 67 
FANCY CLOCK BETA 
Current date: March 8, 2017 

代码这里:

public class fancyClock { 
public static void main(String[] args) { 
int counter = 1; 
int year = 1969; 
boolean isLeapYear = false; 
int yearsUntilLeapYear = 2; 
int days = 1; 
int daysTemp = 0; 
int months = 1; 
String month = ""; 
int hours = 24; 
int minutes = 00; 
int day = 0; 

long millis = System.currentTimeMillis(); 
System.out.println(millis); 


while (counter == 1) { 
    if (millis - 86400000 > 0) { 
    days++; 
    millis = millis - 86400000; 
    } else { 
    counter--; 
    } 
} 
counter++; 
daysTemp = days; 
while (counter == 1) { 
if (yearsUntilLeapYear == 0) { 
    isLeapYear = true; 
} 
    // ESSENTIAL!!! IF COND MUST BE MOD, NOT MINUS!!! 
    if (daysTemp % 365 > 0 && isLeapYear == false) { 
    daysTemp = daysTemp - 365; 
    year++; 
    yearsUntilLeapYear--; 
    } else if (daysTemp % 366 > 0 && isLeapYear == true) { 
    isLeapYear = false; 
    yearsUntilLeapYear = 4; 
    daysTemp = daysTemp - 366; 
    year++; 
    yearsUntilLeapYear--; 
    } else { 
    counter--; 
    } 
} 
counter++; 
if (isLeapYear == true) { 
    daysTemp = daysTemp + 366; 
} else if (isLeapYear == false) { 
    daysTemp = daysTemp + 365; 
} 
System.out.println("Days after flip: " + daysTemp); 

while (counter == 1) { 
    if ((months == 1 && (daysTemp - 31 > 0)) || (months == 3 && (daysTemp - 31 > 0)) || (months == 5 && (daysTemp - 31 > 0)) || (months == 7 && (daysTemp - 31 > 0)) || (months == 8 && (daysTemp - 31 > 0)) || (months == 10 && (daysTemp - 31 > 0)) || (months == 12 && (daysTemp - 31 > 0))) { 
    daysTemp = daysTemp - 31; 
    months++; 
    } else if (months == 2 && isLeapYear == true && (daysTemp - 29 > 0)) { 
    daysTemp = daysTemp - 29; 
    months++; 
    } else if (months == 2 && isLeapYear == false && (daysTemp - 28 > 0)) { 
    daysTemp = daysTemp - 28; 
    months++; 
    } else if ((months == 4 && (daysTemp - 30 > 0)) || (months == 6 && (daysTemp - 30 > 0)) || (months == 9 && (daysTemp - 30 > 0)) || (months == 11 && (daysTemp - 30 > 0))) { 
    daysTemp = daysTemp - 30; 
    months++; 
    } else { 
    counter--; 
    } 
} 

if (months == 1) { 
    month = "January"; 
} else if (months == 2) { 
    month = "Febuary"; 
} else if (months == 3) { 
    month = "March"; 
} else if (months == 4) { 
    month = "April"; 
} else if (months == 5) { 
    month = "May"; 
} else if (months == 6) { 
    month = "June"; 
} else if (months == 7) { 
    month = "July"; 
} else if (months == 8) { 
    month = "August"; 
} else if (months == 9) { 
    month = "September"; 
} else if (months == 10){ 
    month = "October"; 
} else if (months == 11){ 
    month = "November"; 
} else { 
    month = "December"; 
} 
day = daysTemp; 


System.out.println("FANCY CLOCK BETA"); 
System.out.println("Current date: " + month + " " + day + ", " + year); 


} 
}