SimpleDateFormat la production d'une fausse date de temps lors de l'analyse “AAAA-MM-jj HH:mm”
Je suis en train d'analyser un String
(YYYY-MM-dd HH:mm
) à Date
, cependant l'obtention d'une fausse date que prévu.
CODE:
Date newDate = null;
String dateTime = "2013-03-18 08:30";
SimpleDateFormat df = new SimpleDateFormat("YYYY-MM-dd HH:mm", Locale.ENGLISH);
df.setLenient(false);
try {
newDate = df.parse(dateTime);
} catch (ParseException e) {
throw new InvalidInputException("Invalid date input.");
}
Produit:
Dim Déc 30 08:30:00 HNE 2012 (mauvais)
J'ai essayé de réglage Indulgent mais pas de chance.
Mise à jour
Grâce Sudhanshu pour la réponse, cela m'a aidé à résoudre la Java de conversion. Quand j'ai entrez la date renvoyée à partir du code ci-dessus dans la base de données, je suis à la date de l'obtention correctement, mais le temps est toujours 00:00
.
ps.setDate(3, new java.sql.Date(app.getDate().getTime()));
Pour la mise à jour,
java.sql.Date
est pour un jour seulement, pour le type de données de date de SQL. À partir de la documentation: “Pour se conformer à la définition de SQL DATE, l'ordre de la milliseconde valeurs enveloppé par un java.sql.Date d'instance doit être 'normalisé' les heures, les minutes, les secondes et les millisecondes à zéro dans le fuseau horaire particulier avec lequel l'instance est associée.”OriginalL'auteur Sas | 2013-04-10
Vous devez vous connecter pour publier un commentaire.
AAAA doit être aaaa-
Consultez la documentation de SimpleDateFormat ici
Java 6 : http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDateFormat.html
Java 7 : http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
OriginalL'auteur Sudhanshu Umalkar
Utiliser de petits cas Y, pas de casquettes. ie aaaa pas AAAA
Vérifier les commentaires ici: Java Simple Format De La Date et les autres réponses référencés.
OriginalL'auteur Raymond Machira
Il y a deux problème.
"yyyy-MM-dd HH:mm"
.TimeStamp
et pasDate
dans la base de données.Corriger à la fois les choses et vous serez en mesure de stocker et de récupérer la Date avec le temps.
OriginalL'auteur Rais Alam
Voici la réponse moderne. Les autres réponses sont bonnes réponses quand ils ont été écrits en 2013. L'année d'après que la date et l'heure de l'API est sorti comme un remplacement pour les anciennes classes
Date
,SimpleDateFormat
et amis. À mon humble avis, vous devriez utiliser les nouvelles classes aujourd'hui. Ils sont beaucoup plus sympathique programmeur.Sauf pour les noms de classe, il n'est pas si différent de l'ancien code. Avec d'autres exemples, il y aura des différences, généralement les classes modernes fournira le code plus clair et moins de possibilités d'erreurs.
Pour juste un peu de faire la démonstration d'une différence, nous allons essayer le modèle de format de chaîne de caractères que vous avez eu avec majuscules
YYYY
:Maintenant le code lance un
java.time.format.DateTimeParseException: Text '2013-03-18 08:30' could not be parsed: Unable to obtain LocalDateTime from TemporalAccessor: {MonthOfYear=3, DayOfMonth=18, WeekBasedYear[WeekFields[SUNDAY,1]]=2013},ISO resolved to 08:30 of type java.time.format.Parsed
. Il est long, je sais. La chose à noter est qu'il n'y a pas d'année entre les champs, il mentionne seulement une WeekBasedYear. Ce n'est pas le même; et vous pouvez l'avoir compris maintenant que c'est précisément parce que les majusculesY
est pour la semaine de la base de l'année (seulement usseful avec un numéro de semaine), où vous devez utiliser des minusculesy
pour l'année. Je considère ce comportement un peu plus utile que ce que les vieux de classes: ils vous ont donné un résultat faux, fait semblant que tout allait bien et à gauche de vous complètement dans l'ignorance de ce qui n'allait pas.Prochaine je comprends que vous souhaitez stocker votre date-heure à une base de données. Dans les jours anciens vous convertir à un niveau approprié
java.sql
type. N'est plus nécessaire. Je crois qu'avec un JDBC 4.2 pilote, tu peux faire:Je n'ai pas testé avec une base de données. Notez que vous utilisez
setObject()
au lieu desetDate()
.OriginalL'auteur Ole V.V.