Was ist der beste Weg, um ein Datum zu analysieren, in MM/DD/YY-format und passen es an die aktuellen / vorherigen Jahrhundert?
Einer unserer Kunden will in der Lage sein, geben Sie ein Datum mit nur 2 stellen für das Jahr Komponente. Wird das Datum in der Vergangenheit, so wollen wir es an die Arbeit für die vorherigen Jahrhundert, wenn die 2-digit year ist nach dem aktuellen Jahr, aber die Arbeit für das aktuelle Jahrhundert, wenn die 2-digit year ist gleich oder kleiner als das aktuelle Jahr.
heute 10/30/2008
01/01/01 = 01/01/2001
01/01/09 = 01/01/1909
Dies ist eine seltsame Forderung, und ich löste das problem, ich weiß einfach nicht, wie meine Lösung.
Es fühlt sich an wie es ist ein besserer Weg, dies zu tun.
Danke für die Hilfe.
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;
}
InformationsquelleAutor ScArcher2 | 2008-10-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
Groovy-Skript (einfach genug zu werfen, um in java) zum Nachweis der Punkt @bobince über " = SimpleDateFormat.
Erträge
InformationsquelleAutor Ken Gentle
"=SimpleDateFormat führt bereits die zweistellige Jahreszahl analysieren für Sie, mit den zwei Buchstaben " yy " format. (Es werden noch vier Ziffern, offensichtlich.)
Standardmäßig verwendet es jetzt-80→jetzt+20, so ist es nicht genau der gleiche Regelung, die Sie vorschlagen, aber es ist vernünftig und standardisierte (in der Java-Welt zumindest), und kann überschrieben werden mit set2DigitYearStart (), wenn Sie wollen.
Langfristig versuchen zu migrieren, um nach ISO8601 die Formatierung des Datums (JJJJ-MM-TT), denn die MM/dd/yy ist in etwa das schlechteste Datum-format und gebunden ist, um Probleme zu verursachen schließlich.
Ja, wenn es nach mir geht würde ich sagen, benötigen wir eine vierstellige Jahr. Das Problem ist gelöst.
In der Tat - clients sind Narren! 🙂 Das ist der Grund, warum es sein muss, näherte sich heimlich!
InformationsquelleAutor bobince
Wie wäre es damit:
In anderen Worten, lassen Sie "= SimpleDateFormat Parsen Sie den String und justieren Sie einfach das Jahr des vergangenen Jahrhunderts, wenn " = SimpleDateFormat (das hat seine eigenen Regeln für die Auslegung Jahr strings) gibt ein Datum nach dem aktuellen Datum.
Dies würde garantieren, dass alle Daten zurückgegeben werden, in der Vergangenheit. Es hat jedoch nicht für alle Daten kann analysiert werden, wie vor vergangenen Jahrhunderts - zum Beispiel mit dem format
MM/dd/yyyy
eine Datums-Zeichenfolge wie "01/11/12" analysiert Jan 11, 12 A. D.InformationsquelleAutor matt b
Wenn Joda Time ist eine option:
Ich weiß, Joda Time ist nicht Teil der Java SE, und wie ich schon sagte in einem anderen thread, ich in der Regel nicht dulden die Verwendung einer Drittanbieter-Bibliothek, wenn es eine Java-Bibliothek, die nicht die gleiche Sache. Jedoch, die person, die die Entwicklung von Joda Time ist auch führender JSR310 - Datum und Zeit API, wird es in Java 7. Also ich Joda Time ist im Grunde gehen, um in zukünftigen Java-Versionen.
Ich dachte an etwas ähnliches, aber das würde bedeuten, dass das aktuelle Jahr wird immer behandelt werden, als das aktuelle Jahr, auch wenn es einige Zeit in der Zukunft (d.h., 12/31/08 wäre 12/31/2008 statt 12/31/1908). Ich denke, die richtige Lösung hängt von den Anforderungen des Kunden.
InformationsquelleAutor Jack Leow
Arbeiten für mich.
InformationsquelleAutor chetan singhal
Pivot-Jahr In Joda-Time
Die ausgezeichnete Joda-Time-2.5-Bibliothek beinhaltet diese Funktionalität. Keine Notwendigkeit, einen code schreiben selbst. Rufen Sie einfach
withPivotYear()
auf eineDateTimeFormatter
. Siehe der verlinkte doc für Beispiele, wie es zu benutzen.InformationsquelleAutor Basil Bourque
Der beste Weg ist, um die Joda Time API für Datums-und Zeitangaben in Java.
InformationsquelleAutor Steve McLeod