Μετατροπή συμβολοσειράς Java σε ημερομηνία

Ποιος είναι ο καλύτερος τρόπος για να μετατρέψετε μια String με τη μορφή '2 Ιανουαρίου 2010' σε μια Date στη Java;

Τελικά, θέλω να διαχωρίσω τον μήνα, την ημέρα και το έτος ως ακέραιους αριθμούς ώστε να μπορώ να χρησιμοποιήσω

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

για να μετατρέψω την ημερομηνία σε ώρα.

Λύση

Αυτός είναι ο δύσκολος τρόπος, και αυτές οι μέθοδοι ορισμού java.util.Date έχουν καταργηθεί από τη Java 1.1 (1997). [Απλά μορφοποιήστε την ημερομηνία χρησιμοποιώντας το SimpleDateFormat χρησιμοποιώντας ένα πρότυπο μορφοποίησης που ταιριάζει με το αλφαριθμητικό εισόδου][1].

Στη δική σας περίπτωση της "2 Ιανουαρίου 2010" ως συμβολοσειρά εισόδου:

  1. Ο "Ιανουάριος" είναι ο πλήρης μήνας του κειμένου, οπότε χρησιμοποιήστε το πρότυπο MMMM για αυτόν.
  2. Το "2" είναι η σύντομη ημέρα του μήνα, οπότε χρησιμοποιήστε το πρότυπο d για αυτό.
  3. "2010" είναι το τετραψήφιο έτος, οπότε χρησιμοποιήστε το μοτίβο yyyy για αυτό.
Σχόλια (4)

Α, ναι, η συζήτηση για την ημερομηνία Java, ξανά. Για την επεξεργασία ημερομηνιών χρησιμοποιούμε τις Date, Calendar, GregorianCalendar και SimpleDateFormat. Για παράδειγμα, χρησιμοποιώντας την ημερομηνία Ιανουαρίου ως είσοδο:

Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

Στη συνέχεια, μπορείτε να το χειριστείτε με κάτι τέτοιο:

Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));
Σχόλια (1)

Ενώ ασχολείστε με την κλάση SimpleDateFormat, είναι σημαντικό να θυμάστε ότι η Date δεν είναι ασφαλής για νήματα και δεν μπορείτε να μοιραστείτε ένα αντικείμενο Date με πολλαπλά νήματα.

Επίσης, υπάρχει μεγάλη διαφορά μεταξύ του "m" και του "M" όπου η μικρή πεζότητα χρησιμοποιείται για τα λεπτά και η κεφαλαία για τον μήνα. Το ίδιο συμβαίνει και με τα "d" και "D". Αυτό μπορεί να προκαλέσει ανεπαίσθητα σφάλματα τα οποία συχνά παραβλέπονται. Ανατρέξτε στο Javadoc ή στον Οδηγός για τη μετατροπή συμβολοσειράς σε ημερομηνία στη Java για περισσότερες λεπτομέρειες.

Σχόλια (2)