2017-04-20 127 views
0

即時通訊工作的公曆日程項目,我必須從今天和我的生日周的某一天打印100天。該程序顯示一天,但是錯誤的一天。你們能幫我解決這個問題嗎?謝謝!Java公曆日曆輸出錯誤日期

import java.util.GregorianCalendar; 
public class Gregorian { 

    public static void main(String[] args) 
    { 
     Day today = new Day(); 
      System.out.print("Today: "); 
      System.out.println(today.toString()); 

     GregorianCalendar Date = new GregorianCalendar(); 
     Date.add(GregorianCalendar.DAY_OF_MONTH, 100); 
     CalendarUtils utils = new CalendarUtils(); 
     String day = utils.getWeekday(Date.get(GregorianCalendar.DAY_OF_WEEK)); 

     int year=Date.get(GregorianCalendar.YEAR); 
     int month=Date.get(GregorianCalendar.MONTH); 
     int dayof=Date.get(GregorianCalendar.DAY_OF_MONTH); 

     System.out.println("100 days from today: " + year + "/" + month + "/" + dayof + " which is a: " + day); 


     GregorianCalendar Birthday = new GregorianCalendar(2012,1,1); 
     String Bday = utils.getWeekday(Birthday.get(GregorianCalendar.DAY_OF_WEEK)); 
     System.out.println("Weekday of my Birthday: " + Bday); 

     Birthday.add(GregorianCalendar.DAY_OF_MONTH, 10000); 

     int Byear=Birthday.get(GregorianCalendar.YEAR); 
     int Bmonth=Birthday.get(GregorianCalendar.MONTH); 
     int Bdayof=Birthday.get(GregorianCalendar.DAY_OF_MONTH); 

     System.out.println("10000 days from my Birthday: " + Byear + "/" + Bmonth + "/" + Bdayof); 

這裏是CalendarUtils

import java.util.GregorianCalendar; 
public class CalendarUtils 
{ 
    /** 
     Returns the String for GregorianCalendar DAY_OF_WEEK 
    */ 
    public String getWeekday(int day_of_week) 
    { 
     String day = ""; 

     if (day_of_week == GregorianCalendar.SUNDAY) 
     { 
     day = "Sunday"; 
     } 
     else if (day_of_week == GregorianCalendar.MONDAY) 
     { 
     day = "Monday"; 
     } 
     else if (day_of_week == GregorianCalendar.TUESDAY) 
     { 
     day = "Tuesday"; 
     } 
     else if (day_of_week == GregorianCalendar.WEDNESDAY) 
     { 
     day = "Wednesday"; 
     } 
     else if (day_of_week == GregorianCalendar.THURSDAY) 
     { 
     day = "Thursday"; 
     } 
     else if (day_of_week == GregorianCalendar.FRIDAY) 
     { 
     day = "Friday"; 
     } 
     else if (day_of_week == GregorianCalendar.SATURDAY) 
     { 
     day = "Saturday"; 
     } 

     return day; 
    } 

    /** 
     Returns the string of GregorianCalendar MONTH 
    */ 
    public String getMonth(int month) 
    { 
     String monthStr = ""; 

     if (month == GregorianCalendar.JANUARY) 
     { 
     monthStr = "January"; 
     } 
     else if (month == GregorianCalendar.FEBRUARY) 
     { 
     monthStr = "February"; 
     } 
     else if (month == GregorianCalendar.MARCH) 
     { 
     monthStr = "March"; 
     } 
     else if (month == GregorianCalendar.APRIL) 
     { 
     monthStr = "April"; 
     } 
     else if (month == GregorianCalendar.MAY) 
     { 
     monthStr = "May"; 
     } 
     else if (month == GregorianCalendar.JUNE) 
     { 
     monthStr = "June"; 
     } 
     else if (month == GregorianCalendar.JULY) 
     { 
     monthStr = "July"; 
     } 
     else if (month == GregorianCalendar.AUGUST) 
     { 
     monthStr = "August"; 
     } 
     else if (month == GregorianCalendar.SEPTEMBER) 
     { 
     monthStr = "September"; 
     } 
     else if (month == GregorianCalendar.OCTOBER) 
     { 
     monthStr = "October"; 
     } 
     else if (month == GregorianCalendar.NOVEMBER) 
     { 
     monthStr = "November"; 
     } 
     else if (month == GregorianCalendar.DECEMBER) 
     { 
     monthStr = "December"; 
     } 

     return monthStr; 
    } 
} 
+0

這可能是因爲你正在初始化「GregorianCalendar」作爲年份。它輸出什麼,你期望什麼? –

+0

多數民衆贊成在這個日期我得到星期幾和我期待星期天,但我得到星期三 – Tim

+0

你可以發佈你的'utils#getWeekday'方法嗎?這很可能是不正確的。 –

回答

1

TL;博士

LocalDate.now()   // Determine current date (no time-of-day) for the JVM’s current default time zone. 
    .plusDays(100)  // Add days. 
    .getDayOfWeek()  // Get `DayOfWeek` enum object. 
    .getDisplayName(FormatStyle.FULL , Locale.ITALY) // Generate a string of the name of this day-of-week automatically localized with a certain length/abbreviation. 

詳細

現在的麻煩Calendar類是傳統的,由java.time類取代。

您想在今天之後添加一百天。

LocalDate today = LocalDate.now(); 
LocalDate hundred = today.plusDays(100); 

你想要今年的生日的星期幾。

MonthDay birthday = MonthDay.of(Month.JANUARY , 23); 
LocalDate birthdayThisYear = birthday.atYear(today.getYear()); 
DayOfWeek dow = birthdayThisYear.getDayOfWeek(); 

你想要月份和星期幾的名稱。讓java.time自動爲您定位。

Locale locale = Locale.CANADA_FRENCH ; // Or Locale.US, etc. 
String m = today.getMonth().getDisplayName(TextStyle.FULL , locale); 
String d = dow.getDisplayName(TextStyle.FULL , locale); 
0

我想你想進入2012年1月1日作爲生日?在正確的路線是:

GregorianCalendar Birthday = new GregorianCalendar(2012, 0, 1); 

或更好:

GregorianCalendar Birthday = new GregorianCalendar(2012, Calendar.JANUARY, 1); 

月份是基於零(0 =月,1月= ...)。結果如下:我生日的平日:週日