Comment extraire les valeurs de jour, mois et année d'une chaîne [comme 18/08/2012]. J'ai essayé d'utiliser SimpleDateFormat, mais il renvoie un objet Date et j'ai observé que toutes les méthodes Get sont obsolètes. Y a-t-il une meilleure façon de faire cela?
Merci
Personnellement, je voudrais utiliser Joda Time , qui simplifie considérablement la vie. En particulier, cela signifie que vous n'avez pas besoin de vous soucier du fuseau horaire de la variable Calendar
par rapport au fuseau horaire d'une variable SimpleDateFormat
. Vous pouvez simplement analyser une variable LocalDate
, ce que les données vraiment vous indiquent. Cela signifie également que vous n'avez pas à vous soucier de la période de 0 mois :)
Joda Time rend les opérations de date/heure beaucoup plus agréables.
import Java.util.*;
import org.joda.time.*;
import org.joda.time.format.*;
public class Test {
public static void main(String[] args) throws Exception {
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd/MM/yyyy")
.withLocale(Locale.UK);
LocalDate date = formatter.parseLocalDate("18/08/2012");
System.out.println(date.getYear()); // 2012
System.out.println(date.getMonthOfYear()); // 8
System.out.println(date.getDayOfMonth()); // 18
}
}
Il suffit d'aller pour String.split()
,
String str[] = "18/08/2012".split("/");
int day = Integer.parseInt(str[0]);
int month = Integer.parseInt(str[1]);
..... and so on
Cela devrait vous aider sans ajouter de bocaux externes
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse("18/08/2012");
Calendar c = Calendar.getInstance();
c.setTime(parse);
System.out.println(c.get(Calendar.MONTH) + c.get(Calendar.DATE) + c.get(Calendar.YEAR));
Créez un objet Java.util.Calendar hors de cette date comme suit et extrayez les parties de date:
Calendar cal = Calendar.getInstance();
cal.setTime(<date from simple-date-format).
cal.get(Calendar.MONTH);
etc.,
Java.time.LocalDate.parse(
"18/08/2012" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
).getDayOfMonth() // .getYear() .getMonth()
L'approche moderne utilise les classes Java.time. Évitez les anciennes classes problématiques telles que Date
& Calendar
.
LocalDate
String input = "18/08/2012" ;
La classe LocalDate
représente une valeur de date uniquement sans heure et sans fuseau horaire.
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" ) ;
LocalDate ld = LocalDate.parse( input , f ) ;
ld.toString (): 2012-08-18
Interroger les pièces.
int d = ld.getDayOfMonth() ;
int m = ld.getMonthValue() ;
int y = ld.getYear() ;
La structure Java.time est intégrée à Java 8 et versions ultérieures. Ces classes supplantent les anciennes classes gênantes legacy telles que Java.util.Date
, Calendar
, & SimpleDateFormat
.
Le projet Joda-Time , désormais en mode maintenance , conseille la migration vers les classes Java.time .
Pour en savoir plus, voir le Oracle Tutorial . Et recherchez Stack Overflow pour de nombreux exemples et explications. La spécification est JSR 310 .
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 d’éventuels ajouts à Java.time. Vous pouvez y trouver des classes utiles telles que Interval
, YearWeek
, YearQuarter
et more .
Utilisez ceci et transmettez la valeur de date
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date parse = sdf.parse(""18/01/2018);
Calendar calendar = Calendar.getInstance();
calendar.setTime(parse);
int date = calendar.get(Calendar.DATE);
//+1 Is Important Because if the month is January then coming 0 so Add +1
int month = calendar.get(Calendar.MONTH)+1;
int year = calendar.get(Calendar.YEAR);
System.out.println("Date:"+date +":Month:"+ month + ":Year:"+year);
Une autre approche peut être utiliser Calendar object get(Calendar.MONT)
Exemple:
Calendar cal = Calendar.getInstance();
cal.setTime(dateObj).
cal.get(Calendar.MONTH);
(ou)
Vous pouvez utiliser String.split () also.