web-dev-qa-db-fra.com

java obtenir la première date et la dernière date du mois et de l'année donnés

J'essaie d'obtenir la première date et la dernière date du mois et de l'année donnés. J'ai utilisé le code suivant pour obtenir la dernière date au format aaaaMMjj. Mais ne pouvait pas obtenir ce format. Aussi, je veux que la date de début soit dans le même format. Je travaille toujours sur ceci. Quelqu'un peut-il m'aider à réparer le code ci-dessous? 

public static Java.util.Date calculateMonthEndDate(int month, int year) {
    int[] daysInAMonth = { 29, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    int day = daysInAMonth[month];
    boolean isLeapYear = new GregorianCalendar().isLeapYear(year);

    if (isLeapYear && month == 2) {
        day++;
    }
    GregorianCalendar gc = new GregorianCalendar(year, month - 1, day);
    Java.util.Date monthEndDate = new Java.util.Date(gc.getTime().getTime());
    return monthEndDate;
}

public static void main(String[] args) {
    int month = 3;
    int year = 2076;
    final Java.util.Date calculatedDate = calculateMonthEndDate(month, year);
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
    format.format(calculatedDate);
    System.out.println("Calculated month end date : " + calculatedDate);
} 
10
user1514499

Pour obtenir la Date de début  

    GregorianCalendar gc = new GregorianCalendar(year, month-1, 1);
    Java.util.Date monthEndDate = new Java.util.Date(gc.getTime().getTime());
    System.out.println(monthEndDate);

(Remarque: dans la date de début le jour = 1)

pour le formaté 

SimpleDateFormat format = new SimpleDateFormat(/////////add your format here);
System.out.println("Calculated month end date : " + format.format(calculatedDate));
5
Alya'a Gamal

Java.time.YearMonth

Le nouveau framework Java.time sous Java 8 ( Didacticiel _) dispose de commandes à cet effet.

La classe bien nommée YearMonth représente un mois de l'année, sans jour ni heure spécifiques. De là, nous pouvons demander les premiers jours du mois.

YearMonth yearMonth = YearMonth.of( 2015, 1 );  // January of 2015.
LocalDate firstOfMonth = yearMonth.atDay( 1 );
LocalDate last = yearMonth.atEndOfMonth();

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes héritées _ date-heure telles que Java.util.Date , Calendar _, & SimpleDateFormat .

Le projet Joda-Time , désormais en mode { mode maintenance }, conseille la migration vers les classes Java.time .

Pour en savoir plus, consultez le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .

Vous pouvez échanger des objets Java.time directement avec votre base de données. Utilisez un pilote JDBC compatible avec JDBC 4.2 ou une version ultérieure. Pas besoin de chaînes, pas besoin de Java.sql.* classes.

Où obtenir les classes Java.time? 

  • Java SE 8 , Java SE 9 , Java SE 10 , et versions ultérieures
    • Intégré. 
    • Une partie de l'API Java standard avec une implémentation fournie.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de la fonctionnalité Java.time est rétroportée vers Java 6 et 7 dans ThreeTen-Backport .
  • Android
    • Les versions ultérieures d'Android regroupent des implémentations des classes Java.time.
    • Pour les anciens Android (<26), le projet ThreeTenABP s’adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser ThreeTenABP… .

Le projet ThreeTen-Extra étend Java.time avec des classes supplémentaires. Ce projet est un terrain d’essai pour d’éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval _, YearWeek , YearQuarter _ et plus _.

12
Basil Bourque
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
format.format(calculatedDate);
System.out.println("Calculated month end date : " + calculatedDate);

Le changer en

SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
String formattedDate =  format.format(calculatedDate);
System.out.println("Calculated month end date : " + formattedDate);

Pour plus de détail

http://docs.Oracle.com/javase/1.5.0/docs/api/Java/text/DateFormat.html#format(Java.util.Date )

Une autre approche

package com.shashi.mpoole;

import Java.text.SimpleDateFormat;
import Java.util.Calendar;
import Java.util.Date;
import Java.util.GregorianCalendar;

public class DateMagic {

    public static String PATTERN = "yyyyMMdd";


    static class Measure
    {
        private int month;
        private int year;
        private Calendar calendar;

        public Measure() {
            // TODO Auto-generated constructor stub
            init();

        }

        private void init() {
            // TODO Auto-generated method stub
             calendar = Calendar.getInstance();
             calendar.set(year, month, 1);

        }

        public String min()
        {
            return format(calendar.getActualMinimum(Calendar.DAY_OF_MONTH));
        }

        public String max()
        {
            return format(calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
        }

        private Date date(GregorianCalendar c)
        {
            return new Java.util.Date(c.getTime().getTime());

        }

        private GregorianCalendar gc(int day)
        {
            return new GregorianCalendar(year, month, day);
        }


        private String format(int day) {

             SimpleDateFormat format = new SimpleDateFormat(PATTERN);
             return format.format(date(gc(day)));
        }

        public Measure month(int month) {
            // TODO Auto-generated method stub
            this.month = month -1 ;
            return this;
        }

        public Measure year(int year) {
            // TODO Auto-generated method stub
            this.year = year;
            return this;
        }
    }



    public static void main(String[] args) {

        Measure measure = new Measure().month(3).year(2076);
        System.out.println(measure.max());
        System.out.println(measure.min());
    } 


}
5
Shashi

Vous pouvez simplement utiliser la classe Calendar. vous devriez assigner la variable mois quel mois vous voulez

        Calendar gc = new GregorianCalendar();
        gc.set(Calendar.MONTH, month);
        gc.set(Calendar.DAY_OF_MONTH, 1);
        Date monthStart = gc.getTime();
        gc.add(Calendar.MONTH, 1);
        gc.add(Calendar.DAY_OF_MONTH, -1);
        Date monthEnd = gc.getTime();
        SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");

        System.out.println("Calculated month start date : " + format.format(monthStart));
        System.out.println("Calculated month end date : " + format.format(monthEnd));
5
ttn

Premier jour:  

Calendar.getInstance().getActualMinimum(Calendar.DAY_OF_MONTH);

Dernier jour du mois:

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);
4
DinushaMadusanka

Essayez le code ci-dessous pour le dernier jour du mois: -

Calendar c = Calendar.getInstance();      
c.set(2012,3,1); //------>  
c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH));  

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");  
System.out.println(sdf.format(c.getTime())); 

http://www.coderanch.com/t/385759/Java/java/date-date-month

4
duggu
        GregorianCalendar gc = new GregorianCalendar(year, selectedMonth-1, 1);
           Java.util.Date monthStartDate = new Java.util.Date(gc.getTime().getTime());
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(monthStartDate);
        calendar.add(calendar.MONTH, 1);
        calendar.add(calendar.DAY_OF_MONTH, -1);
           Java.util.Date monthEndDate = new Java.util.Date(calendar.getTime())
2
Gururaj Enamate

Bien que, pas exactement la réponse à la question OP, les méthodes ci-dessous donneront mois en cours première et dernière dates en tant qu'instances Java 8+ LocalDate.

public static LocalDate getCurrentMonthFirstDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).withDayOfMonth(1);
}

public static LocalDate getCurrentMonthLastDate() {
    return LocalDate.ofEpochDay(System.currentTimeMillis() / (24 * 60 * 60 * 1000) ).plusMonths(1).withDayOfMonth(1).minusDays(1);
}

Note latérale: L'utilisation de LocalDate.ofEpochDay(...) au lieu de LocalDate.now() améliore considérablement les performances. En outre, l'utilisation de l'expression millis-en-un-jour au lieu de la valeur finale, qui correspond à 86400000, donne de meilleurs résultats. Au départ, je pensais que ce dernier serait plus performant que l'expression: P

Pourquoi cette réponse : Ce n’est pourtant pas une réponse correcte pour la question OP, mais je réponds toujours ici car Google a montré cette question lorsque j’ai cherché 'Java 8 get month start date' :)

1
manikanta
public static Date[] getMonthInterval(Date data) throws Exception {

    Date[] dates = new Date[2];

    Calendar start = Calendar.getInstance();
    Calendar end = Calendar.getInstance();

    start.setTime(data);
    start.set(Calendar.DAY_OF_MONTH, start.getActualMinimum(Calendar.DAY_OF_MONTH));
    start.set(Calendar.HOUR_OF_DAY, 0);
    start.set(Calendar.MINUTE, 0);
    start.set(Calendar.SECOND, 0);

    end.setTime(data);
    end.set(Calendar.DAY_OF_MONTH, end.getActualMaximum(Calendar.DAY_OF_MONTH));
    end.set(Calendar.HOUR_OF_DAY, 23);
    end.set(Calendar.MINUTE, 59);
    end.set(Calendar.SECOND, 59);

    //System.out.println("start "+ start.getTime());
    //System.out.println("end   "+ end.getTime());

    dates[0] = start.getTime();
    dates[1] = end.getTime();

    return dates;
}
0
Daniele Rucci