J'ai cet extrait de code:
DateFormat formatter1;
formatter1 = new SimpleDateFormat("mm/DD/yyyy");
System.out.println((Date)formatter1.parse("08/16/2011"));
Quand je lance ceci, je reçois ceci comme sortie:
Sun Jan 16 00:10:00 IST 2011
J'esperais:
Tue Aug 16 "Whatever Time" IST 2011
Je veux dire que je ne reçois pas le mois comme prévu. Quelle est l'erreur?
Essaye ça:
new SimpleDateFormat("MM/dd/yyyy")
MM
est "mois" (pas mm
)dd
est "jour" (pas DD
)Tout est dans le javadoc pour SimpleDateFormat
Pour votre information, la raison pour laquelle votre format est toujours valide est la suivante:
mm
est "minutes"DD
est "jour dans l'année"De plus, vous n'avez pas besoin du transtypage en Date
... il est déjà est une Date
(ou elle explose):
public static void main(String[] args) throws ParseException {
System.out.println(new SimpleDateFormat("MM/dd/yyyy").parse("08/16/2011"));
}
Sortie:
Tue Aug 16 00:00:00 EST 2011
Voila!
m - min M - mois
Letter Date or Time Component Presentation Examples
G Era designator Text AD
y Year Year 1996; 96
M Month in year Month July; Jul; 07
w Week in year Number 27
W Week in month Number 2
D Day in year Number 189
d Day in month Number 10
F Day of week in month Number 2
E Day in week Text Tuesday; Tue
a Am/pm marker Text PM
H Hour in day (0-23) Number 0
k Hour in day (1-24) Number 24
K Hour in am/pm (0-11) Number 0
h Hour in am/pm (1-12) Number 12
m Minute in hour Number 30
s Second in minute Number 55
S Millisecond Number 978
z Time zone General time zone Pacific Standard Time; PST; GMT-08:00
Z Time zone RFC 822 time zone -0800
Utilisez la fonction ci-dessous
/**
* Format a time from a given format to given target format
*
* @param inputFormat
* @param inputTimeStamp
* @param outputFormat
* @return
* @throws ParseException
*/
private static String TimeStampConverter(final String inputFormat,
String inputTimeStamp, final String outputFormat)
throws ParseException {
return new SimpleDateFormat(outputFormat).format(new SimpleDateFormat(
inputFormat).parse(inputTimeStamp));
}
Exemple d'utilisation:
try {
String inputTimeStamp = "08/16/2011";
final String inputFormat = "MM/dd/yyyy";
final String outputFormat = "EEE MMM dd HH:mm:ss z yyyy";
System.out.println(TimeStampConverter(inputFormat, inputTimeStamp,
outputFormat));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String newstr = "08/16/2011";
SimpleDateFormat format1 = new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat format = new SimpleDateFormat("EE MMM dd hh:mm:ss z yyyy");
Calendar c = Calendar.getInstance();
c.setTime(format1.parse(newstr));
System.out.println(format.format(c.getTime()));
Exemple très simple est.
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy");
Date date = new Date();
Date date1 = new Date();
try {
System.out.println("Date1: "+date1);
System.out.println("date" + date);
date = simpleDateFormat.parse("01-01-2013");
date1 = simpleDateFormat.parse("06-15-2013");
System.out.println("Date1 is:"+date1);
System.out.println("date" + date);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Ce morceau de code aide à convertir en arrière
System.out.println("Date: "+ String.valueOf(new Date()));
SimpleDateFormat dt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String stringdate = dt.format(new Date());
System.out.println("String.valueOf(date): "+stringdate);
try {
Date date = dt.parse(stringdate);
System.out.println("parse date: "+ String.valueOf(date));
} catch (ParseException e) {
e.printStackTrace();
}
vous pouvez résoudre le problème de manière très simple comme Convertissez d’abord la chaîne donnée en objet date par exemple:
Java.util.Date date1 = new Date("11/19/2015");
SimpleDateFormat formatter = new SimpleDateFormat("MMM dd yyyy HH:mma");
String format = formatter.format(date);
System.out.println(format);
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MM/dd/uuuu");
System.out.println(LocalDate.parse("08/16/2011", dateFormatter));
Sortie:
2011-08-16
Je contribue la réponse moderne. La réponse de Bohemian est correcte et était une bonne réponse quand il a été écrit il y a 6 ans. Maintenant, la classe notoirement problématique SimpleDateFormat
est depuis longtemps obsolète et nous avons tellement mieux avec Java.time
, l'API de date et heure moderne de Java. Je vous recommande chaudement d'utiliser ceci à la place des anciennes classes date-heure.
Lorsque j'analyse 08/16/2011
à l'aide de votre extrait, j'obtiens Sun Jan 16 00:08:00 CET 2011
. Étant donné que mm
minuscule correspond aux minutes, j'obtiens 00:08:00
(huit minutes après minuit) et, puisque DD
majuscule correspond au jour de l'année, le 16 janvier.
Dans Java.time
également, les chaînes de modèle de format sont sensibles à la casse et nous devions utiliser MM
majuscule pour mois et dd minuscule pour jour du mois.
Oui, Java.time
fonctionne parfaitement sur Java 6 et ultérieur, ainsi que sur les appareils Android anciens et récents.
org.threeten.bp
avec des sous-packages.Java.time
.Java.time
a été décrit pour la première fois.Java.time
vers Java 6 et 7 (ThreeTen pour JSR-310).String localFormat = Android.text.format.DateFormat.getBestDateTimePattern(Locale.getDefault(), "EEEE MMMM d");
return new SimpleDateFormat(localFormat, Locale.getDefault()).format(localMidnight);
retournera un format basé sur la langue du périphérique . Notez que getBestDateTimePattern () renvoie "la meilleure forme localisée possible du squelette donné pour la locale donnée".
Vous avez utilisé des erreurs de type type. Si vous souhaitez définir 08/16/2011 sur le modèle suivant. C'est faux parce que
mm signifie minutes, utilisez MM comme pour mois
DD est faux, ce devrait être dd qui représente Days
Essayez ceci pour obtenir le résultat souhaité (Tue Aug 16 "Whatever Time" IST 2011
),
String date = "08/16/2011"; //input date as String
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy"); // date pattern
Date myDate = simpleDateFormat.parse(date); // returns date object
System.out.println(myDate); //outputs: Tue Aug 16 00:00:00 IST 2011