Obtenir la première date du mois en cours en java


J'essaie d'arriver à la date où ToDate aura la date précédente et FromDate aura la première date du mois en cours. Pour janvier, ce serait 1/1/2013 et ainsi de suite. Comment obtenir correctement la première date du mois en cours? Je ne suis pas en mesure de le faire.

today.add(Calendar.DAY_OF_MONTH, -1);
java.util.Date previousDay=today.getTime();
ToDate = sdfFile1.format(newjava.sql.Date(previousDay.getTime()));
today.add(Calendar.DATE, 1);
java.util.Date nextDay=today.getTime();
FromDate = sdfFile1.format(new java.sql.Date(nextDay.getTime()));
Author: Till Helge, 2013-01-09

6 answers

Essayer

    Calendar c = Calendar.getInstance();   // this takes current date
    c.set(Calendar.DAY_OF_MONTH, 1);
    System.out.println(c.getTime());       // this returns java.util.Date

Mise À Jour (Depuis Java 8):

import java.time.LocalDate;
LocalDate todaydate = LocalDate.now();
System.out.println("Months first date in yyyy-mm-dd: " +todaydate.withDayOfMonth(1));
 59
Author: Evgeniy Dorofeev, 2017-11-01 12:45:36

Tl; dr

Comment obtenir correctement la première date du mois en cours?

LocalDate.now()
         .with( TemporalAdjusters.firstDayOfMonth() )

Ou...

YearMonth.now().atDay( 1 )

Ou...

LocalDate.now().with ( ChronoField.DAY_OF_MONTH , 1 )

Java.temps

Le java.time framework dans Java 8 et plus tard supplante l'ancien java.util.Date/.Classes de calendrier. Les anciennes classes se sont avérées gênantes, déroutantes et imparfaites. Les éviter.

Le java.time framework est inspiré de la bibliothèque Joda-Time, définie par Il s'agit de la première version de la série de jeux vidéo JSR 310 , étendue par le projet ThreeTen-Extra , et expliquée dans le tutoriel .

LocalDate

Pour une valeur de date uniquement, sans heure, utilisez la classe LocalDate. Alors que LocalDate n'a pas attribué de fuseau horaire, nous devons spécifier un fuseau horaire afin de déterminer une date comme "aujourd'hui". Par exemple, un nouveau jour se lève plus tôt à Paris qu'à Montréal.

Le fuseau horaire est crucial pour déterminer la date d'aujourd'hui. Pour un moment donné, la date varie autour de le monde par zone. Omettre le fuseau horaire signifie que le fuseau horaire actuel de la JVM est automatiquement appliqué pour déterminer la date actuelle. N'importe quel code dans la JVM peut changer la valeur par défaut lors de l'exécution, vous marchez donc sur des sables changeants. Mieux vaut spécifier explicitement votre fuseau horaire souhaité/attendu que de compter implicitement sur la valeur par défaut actuelle.

Spécifier un fuseau horaire nom dans le format continent/region, tels que America/Montreal, Africa/Casablanca, ou Pacific/Auckland. N'utilisez jamais la lettre 3-4 abréviations telles que EST ou ISTcar ils sont pas vrais fuseaux horaires, non standardisés, et même pas uniques(!).

ZoneId zoneId = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( zoneId );
LocalDate firstOfCurrentMonth = today.with ( ChronoField.DAY_OF_MONTH , 1 );

Vidage sur console.

System.out.println ( "For zoneId: " + zoneId + " today is: " + today + " and first of this month is " + firstOfCurrentMonth );

Pour zoneId: Amérique / Montréal aujourd'hui est: 2015-11-08 et le premier de ce mois est 2015-11-01

Vous pouvez également utiliser un TemporalAdjuster. Pour votre but, vous trouverez des implémentations pratiques dans le TemporalAdjusters classe (note pluriel s), plus précisément firstDayOfMonth.

LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;

ZonedDateTime

Si vous avez besoin d'une heure de la journée, rappelez-vous que 00:00:00.000 estpas toujours le premier moment de la journée à cause de l'heure d'été (DST) et peut-être d'autres anomalies. Alors laissez java.heure déterminez l'heure correcte du premier moment de la journée.

ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );

2015-11-01T00:00-04:00[Amérique/Montréal]


À propos de java.temps

Le java.temps cadre est intégré dans Java 8 et versions ultérieures. Ces classes permettent d'éviter la pénible vieux héritage date-heure classes telles que java.util.Date, Calendar, & SimpleDateFormat.

Le Joda-Temps le projet, maintenant en mode de maintenance, conseille la migration vers le java.temps classes.

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

Où obtenir le java.les classes de temps?

  • Java SE 8, Java SE 9, et plus tard
    • Intégré.
    • Partie de l'API Java standard avec une implémentation groupée.
    • Java 9 ajoute quelques fonctionnalités et corrections mineures.
  • Java SE 6 et Java SE 7
    • Une grande partie de java.temps la fonctionnalité est porté à Java 6 et 7ThreeTen-Backport.
  • Android
    • Versions ultérieures des implémentations Android bundle de java.les classes de temps.
    • Pour Android plus tôt, le Troisabp le projet adapte ThreeTen-Backport (mentionné ci-dessus). Voir Comment utiliser Troisabp....

Le Trois-Extra le projet étend java.temps avec des cours supplémentaires. Ce projet est un terrain d'essai pour d'éventuels ajouts futurs à java.temps. Vous pouvez trouver quelques classes utiles ici comme Interval, YearWeek, YearQuarter, et plus.

 11
Author: Basil Bourque, 2018-02-09 01:18:47
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
 4
Author: partlov, 2013-01-09 16:37:46

Temps de Joda

Si je comprends bien la question, cela peut être fait très facilement en utilisant joda time

LocalDate fromDate = new LocalDate().withDayOfMonth(1);
LocalDate toDate = new LocalDate().minusDays(1);
 2
Author: ankit.vishen, 2016-06-08 18:59:40

Si vous voulez également que l'heure soit définie sur 0, le code est:

import java.util.*;
import java.text.*;

public class DateCalculations {
  public static void main(String[] args) {

    Calendar aCalendar = Calendar.getInstance();

    aCalendar.set(Calendar.DATE, 1);
    aCalendar.set(Calendar.HOUR_OF_DAY, 0);
    aCalendar.set(Calendar.MINUTE, 0);
    aCalendar.set(Calendar.SECOND, 0);

    Date firstDateOfCurrentMonth = aCalendar.getTime();

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss zZ");
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

    String dayFirst = sdf.format(firstDateOfCurrentMonth);
    System.out.println(dayFirst);
  }
}

, Vous pouvez vérifier en ligne facilement sans compiler en utilisant: http://www.browxy.com/

 1
Author: efirat, 2017-12-04 08:44:15

Fonctionne Comme un charme!

public static String  getCurrentMonthFirstDate(){
    Calendar c = Calendar.getInstance();   
    c.set(Calendar.DAY_OF_MONTH, 1);
    DateFormat df = new SimpleDateFormat("MM-dd-yyyy");
    //System.out.println(df.format(c.getTime())); 
    return df.format(c.getTime());
}

//Correction :sortie =02-01-2018entrez la description de l'image ici

 1
Author: Debasish Ghosh, 2018-02-10 07:46:53