Java格里高利历输出错误的日期

时间:2017-04-20 04:11:46

标签: java java-date java-calendar

我正在进行一个阳历项目,我必须在今天和我生日那天的100天打印。该程序显示一天,但错误的一天。你能帮我解决这个问题吗?谢谢!

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;
   }
}

2 个答案:

答案 0 :(得分: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 );

答案 1 :(得分:0)

我想你想进入2012年1月1日作为生日?正确的行是:

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

或更好:

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

月份为零(0 = 1月,1 = 2月,......)。这导致输出:我生日的星期日:星期日