web-dev-qa-db-fra.com

Obtenez le jour, le mois et l'année séparément en utilisant SimpleDateFormat

J'ai un SimleDateFormat comme celui-ci

SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm");
String date = format.format(Date.parse(payback.creationDate.date));

Je donne une date au format comme "Jan,23,2014".

Maintenant, je veux avoir le jour, le mois et l'année séparément. Comment puis-je implémenter cela?

8
John Error

Si vous devez obtenir les valeurs séparément, utilisez plus d'un SimpleDateFormat.

SimpleDateFormat dayFormat = new SimpleDateFormat("dd");
String day = dayFormat.format(Date.parse(payback.creationDate.date));

SimpleDateFormat monthFormat = new SimpleDateFormat("MM");
String month = monthFormat .format(Date.parse(payback.creationDate.date));

etc.

15
Duncan Jones
    SimpleDateFormat format = new SimpleDateFormat("MMM dd,yyyy  hh:mm", Locale.ENGLISH);

    Date theDate = format.parse("JAN 13,2014  09:15");

    Calendar myCal = new GregorianCalendar();
    myCal.setTime(theDate);

    System.out.println("Day: " + myCal.get(Calendar.DAY_OF_MONTH));
    System.out.println("Month: " + myCal.get(Calendar.MONTH) + 1);
    System.out.println("Year: " + myCal.get(Calendar.YEAR));
14
Udo Klimaschewski

Wow, SimpleDateFormat pour obtenir des parties de chaîne? Il peut être résolu beaucoup plus facilement si votre chaîne d'entrée est comme "Jan, 23,2014":

String input = "Jan,23,2014";
String[] out = input.split(",");
System.out.println("Year = " + out[2]);
System.out.println("Month = " + out[0]);
System.out.println("Day = " + out[1]);

Production:

Year = 2014
Month = Jan
Day = 23

Mais si vous voulez vraiment utiliser SimpleDateFormat pour une raison quelconque, la solution sera la suivante:

String input = "Jan,23,2014";
SimpleDateFormat format = new SimpleDateFormat("MMM,dd,yyyy");
Date date = format.parse(input);
Calendar calendar = Calendar.getInstance(TimeZone.getDefault());
calendar.setTime(date);
System.out.println(calendar.get(Calendar.YEAR));
System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
System.out.println(new SimpleDateFormat("MMM").format(calendar.getTime()));

Production:

2014
23
Jan
7
nikis

La réponse acceptée ici suggère d'utiliser plus d'un SimpleDateFormat, mais il est possible de le faire en utilisant une instance de SimpleDateFormat et en appelant applyPattern.

Remarque: je crois que ce message serait également utile pour ceux qui recherchaient setPattern () comme moi.

Date date=new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
simpleDateFormat.applyPattern("dd");
System.out.println("Day   : " + simpleDateFormat.format(date));
simpleDateFormat.applyPattern("MMM");
System.out.println("Month : " + simpleDateFormat.format(date));
simpleDateFormat.applyPattern("yyyy");
System.out.println("Year  : " + simpleDateFormat.format(date));
4
user6077173

tl; dr

Utilisez la classe LocalDate .

LocalDate
.parse(
    "Jan,23,2014" , 
    DateTimeFormatter.ofPattern( "MMM,dd,uuuu" , Locale.US )
)
.getYear()

… Ou .getMonthValue() ou .getDayOfMonth.

Java.time

Les autres réponses utilisent des classes dépassées. Les classes Java.time supplantent ces anciennes classes héritées gênantes.

LocalDate

La classe LocalDate représente une valeur de date uniquement sans heure et sans fuseau horaire.

String input = "Jan,23,2014";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMM,d,uuuu" );
LocalDate ld = LocalDate.parse( input , f );

Demandez les pièces que vous souhaitez.

int year = ld.getYear();
int month = ld.getMonthValue();
int dayOfMonth = ld.getDayOfMonth();

À propos de Java.time

Le cadre Java.time est intégré à Java 8 et versions ultérieures. Ces classes supplantent l'ancien hérité) gênant classes date-heure telles que Java.util.Date , Calendar , & SimpleDateFormat .

Le projet Joda-Time , maintenant en mode maintenance , conseille la migration vers les classes Java.time .

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

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

Où obtenir les classes Java.time?

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

2
Basil Bourque

Acceptez-vous cela?

int day = 25 ; //25
int month =12; //12
int year = 1988; // 1988
Calendar c = Calendar.getInstance();
c.set(year, month-1, day, 0, 0);    
SimpleDateFormat format =   new SimpleDateFormat("MMM dd,yyyy  hh:mm");
System.out.println(format.format(c.getTime()));

Afficher comme Dec 25,1988 12:00

MISE À JOUR: basé sur le commentaire

DateFormat format =   new SimpleDateFormat("MMM");
System.out.println(format.format(format.parse("Jan,23,2014")));

REMARQUE: Date.parse () est @deprecated et selon l'API, il est recommandé d'utiliser DateFormat.parse

1
Mani

Utilisez ceci pour analyser "Jan, 23,2014"

SimpleDateFormat fmt = new SimpleDateFormat("MMM','dd','yyyy"); 
Date dt = fmt.parse("Jan,23,2014");

alors vous pouvez obtenir n'importe quelle partie de la date.

1
John Ding
public static String getDate(long milliSeconds, String dateFormat) {
        // Create a DateFormatter object for displaying date in specified
        // format.
        SimpleDateFormat formatter = new SimpleDateFormat(dateFormat,
                Locale.getDefault());

        // Create a calendar object that will convert the date and time value in
        // milliseconds to date.
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(milliSeconds);
        return formatter.format(calendar.getTime());
    }
0
Thanh Thinh