2017-04-20 78 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月= ...)。结果如下:我生日的平日:周日