Quelle est la meilleure façon d'analyser une date au format MM / JJ / AA et de l'ajuster au siècle actuel / au siècle précédent?
L'un de nos clients souhaite être en mesure de saisir une date avec seulement 2 chiffres pour l'année de la composante. La date sera dans le passé, si nous voulons travailler pour le siècle précédent, si les 2 chiffres de l'année après l'année en cours, mais le travail pour le cours de ce siècle, si les 2 chiffres de l'année est égal ou inférieur à l'année en cours.
à compter d'aujourd'hui 10/30/2008
Jour du 01/01/01 = 01/01/2001
01/01/09 = 01/01/1909
C'est une exigence de l'étrange, et j'ai résolu le problème, je n'aime pas ma solution.
Il se sent comme il ya une meilleure façon de le faire.
Merci pour l'aide.
public static String stupidDate(String dateString)
{
String twoDigitYear = StringUtils.right(dateString, 2);
String newDate = StringUtils.left(dateString, dateString.length() - 2);
int year = NumberUtils.toInt(twoDigitYear);
Calendar c = GregorianCalendar.getInstance();
int centuryInt = c.get(Calendar.YEAR) - year;
newDate = newDate + StringUtils.left(Integer.toString(centuryInt), 2) + twoDigitYear;
return newDate;
}
source d'informationauteur ScArcher2
Vous devez vous connecter pour publier un commentaire.
Groovy script (assez facile de jeter en java) démontrer que le point @bobince fait sur SimpleDateFormat.
Rendements
Comment à ce sujet:
En d'autres termes, laissez SimpleDateFormat analyser la Chaîne et il suffit de régler l'année, le siècle précédent, si SimpleDateFormat (qui a ses propres règles pour l'interprétation année chaînes) retourne une date postérieure à la date actuelle.
Ce qui permettrait de garantir que toutes les dates sont retournés dans le passé. Cependant, il ne tient pas compte de toutes les dates qui pourraient être analysée comme avant ce siècle passé - par exemple, avec le format
MM/dd/yyyy
une chaîne de date comme "01/11/12" analyse de Jan 11, 12 A. D.SimpleDateFormat fait déjà deux chiffres de l'année d'analyse pour vous, en utilisant les deux lettres " aa " format. (Ça va encore permettre à quatre chiffres, évidemment.)
Par défaut, il utilise maintenant-80→maintenant+20, il n'est donc pas exactement la même règle que vous proposez, mais c'est raisonnable et normalisé (dans le monde Java au moins), et peut être substituée à l'aide de set2DigitYearStart() si vous le souhaitez.
À plus long terme, essayez de migrer vers ISO8601 le formatage de la date (aaaa-MM-jj), parce que MM/dd/yy est environ le pire format de date et est lié à causer des problèmes par la suite.
Si Joda Time est une option:
Je sais Joda Time n'est pas une partie de Java SE, et comme je l'ai dit dans un autre thread, j'ai l'habitude de ne pas cautionner l'aide d'une bibliothèque tierce, quand il y a une bibliothèque Java qui fait la même chose. Cependant, la personne qui est en développement Joda l'Heure est également à la tête de JSR310 - la Date et l'Heure de l'API qui vais le faire en Java 7. J'ai donc Joda Time est fondamentalement va être dans les futures versions de Java.
De travail pour moi.
Année Charnière Dans Joda-Time
L'excellent Joda-Time 2.5 bibliothèque comprend cette fonctionnalité. Pas besoin d'écrire de code vous-même. Appelez simplement
withPivotYear()
sur unDateTimeFormatter
. Voir qui reliait doc pour des exemples de comment l'utiliser.Le meilleur moyen est d'utiliser le Joda Time API pour les dates et les heures dans Java.