Подтвердить что ты не робот

Задача календаря в месяц добавления +1 к календарному месяцу в Android

Я использую следующий код

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());
cal.set(Calendar.MONTH, 01);
System.out.println("After "+cal.getTime());

вывод

Before Thu Jan 31 10:07:34 IST 2013
After Sun Mar 03 10:07:34 IST 2013

для добавления +1 в jan задается месяц mar. может быть, он возвращает правильный результат, если мы добавим 30 дней к дате. но я хочу показать месяц feb. может любое тело помочь мне пожалуйста.

4b9b3361

Ответ 1

вы можете видеть, что поле +1 для установки добавляет 30-дневную дату, отличающуюся от ваших дат (с вашего вывода).

если вам нужны месяцы, используйте код

Calendar cal = Calendar.getInstance();
System.out.println("Before "+cal.getTime());  //Before Thu Jan 31 10:16:23 IST 2013

cal.add(Calendar.MONTH, 1);
System.out.println("After "+cal.getTime()); //After Thu Feb 28 10:16:23 IST 2013

Ответ 2

Вы должны использовать add() like,

cal.add(Calendar.MONTH, 1);

OUTPUT →

Before Thu Jan 31 10:15:04 IST 2013
After Thu Feb 28 10:15:04 IST 2013

Ответ 3

cal.set(Calendar.MONTH, cal.get( Calendar.MONTH ) + 1 );

В любом случае причина, по которой она показывает Mar 3, заключается в том, что она добавляет 30 дней, а это Feb 31st, которая не существует, поэтому она переходит в Mar 3.

Если бы вы хотели получить последний день следующего месяца, вы сделали бы что-то вроде этого:

int month = cal.get( Calendar.MONTH );
cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1);
if( cal.get( month ) > month + 1 ) {
    cal.set( Calendar.MONTH, month + 1 );
    cal.set( Calendar.DAY, /* here comes your day amount finding algorithm */ );
}

Ответ 4

Этот вид работы с датами проще с помощью:

  • Joda-Time 2.3 библиотека
    • Популярная замена классов java.util.Date и .Calendar в комплекте с Java
    • Открытый исходный код
    • Бесплатно
    • Активно поддерживается (по состоянию на 2014-02)
  • пакет java.time
    • Новое в Java 8
    • Вдохновленный Joda-Time, но повторно сконструированный
    • Определено JSR 310
    • Tutorial

Пример кода

DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" ); // Or, DateTimeZone.UTC
DateTime dateTime = new DateTime( timeZone );
DateTime monthAgo = dateTime.plusMonths( -1 ); // Smartly handles various month lengths, leap year, and so on.
DateTime monthLater = dateTime.plusMonths( 1 );

Дамп для консоли...

System.out.println( "dateTime: " + dateTime );
System.out.println( "monthAgo: " + monthAgo );
System.out.println( "monthAgo start of day: " + monthAgo.withTimeAtStartOfDay() );
System.out.println( "monthLater: " + monthLater );

При запуске...

dateTime: 2014-02-24T01:53:22.386+01:00
monthAgo: 2014-01-24T01:53:22.386+01:00
monthAgo start of day: 2014-01-24T00:00:00.000+01:00
monthLater: 2014-03-24T01:53:22.386+01:00

Ответ 5

public class NewClass extends JFrame    
    {   
    public NewClass()
        {

        Calendar cal=new GregorianCalendar();
        JPanel   p1=new JPanel();
        JPanel   p2=new JPanel();
        JPanel   p3=new JPanel();
        JPanel   p=new JPanel();

        BorderLayout layout=new BorderLayout();
        p1.setLayout(new FlowLayout(FlowLayout.LEFT));

        JLabel l1=new JLabel("Sunday");
        JLabel l2=new JLabel("Monday");
        JLabel l3=new JLabel("Tuesday");
        JLabel l4=new JLabel("Wednsday");
        JLabel l5=new JLabel("Thursday");
        JLabel l6=new JLabel("Friday");
        JLabel l7=new JLabel("Saturday");

        p1.add(l1);
        p1.add(l2);
        p1.add(l3);
        p1.add(l4);
        p1.add(l5);
        p1.add(l6);
        p1.add(l7);

        p1.setBorder(new LineBorder(Color.BLACK));

        int x=cal.get(Calendar.MONTH)+1;
        System.out.println(x);
        int y=cal.get(Calendar.DAY_OF_WEEK);
        System.out.println(y);

        p2.setLayout(new GridLayout(5,7));
        if(x==4||x==6||x==9||x==11)
        {
            int j=1;
            for(int i=0;i<(7-(y-1));i++)
            {
                JLabel l=new JLabel(" ",JLabel.CENTER);
                l.setBorder(new LineBorder(Color.BLACK));
                p2.add(l);
                j++;
            }
        for(int i=1;i<=30;i++)
        {

            JLabel l=new JLabel(""+i,JLabel.CENTER);
            l.setBorder(new LineBorder(Color.BLACK));
            p2.add(l);
            j++;
        } 
        }


        p.setLayout(layout);
        p.add(p2,BorderLayout.CENTER);
        p.add(p1,BorderLayout.NORTH);
        add(p,BorderLayout.CENTER);

        JLabel l8=new JLabel(""+(cal.get(Calendar.MONTH+1)+"/"+cal.get(Calendar.YEAR)));
        l8.setHorizontalTextPosition(JLabel.CENTER);
        p3.setLayout(new FlowLayout(FlowLayout.CENTER));
        p3.add(l8);
        add(p3,BorderLayout.NORTH);  
        add(p,BorderLayout.CENTER);
         }