Java.text.parseexception: Ongeparend datum

Ik krijg een parsing-uitzondering terwijl ik de volgende code probeer:

   String date="Sat Jun 01 12:53:10 IST 2013";
    SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
    Date currentdate;
    currentdate=sdf.parse(date);
    System.out.println(currentdate);

Uitzondering:

Uitzondering in draad “Main” Java.text.parseexception: Ongepareerde datum: “SAT JUN 01 12:53:10 IST 2013”
bij Com.ibm.icu.Text.DateFormat.parse (DateFormat.java:510)

Invoer: Sat Jun 01 12:53:10 IST 2013

Verwachte output: Jun 01,2013 12:53:10

Hoe oplossen dit?


Antwoord 1, Autoriteit 100%

Uw patroon komt helemaal niet overeen met de invoerkoord … het is niet verrassend dat het niet werkt. Dit zou waarschijnlijk beter werken:

SimpleDateFormat sdf = new SimpleDateFormat("EE MMM dd HH:mm:ss z yyyy",
                                            Locale.ENGLISH);

Duidelijk afdrukken met uw gewenste indeling heeft u een tweede simpledateformat:

Date parsedDate = sdf.parse(date);
SimpleDateFormat print = new SimpleDateFormat("MMM d, yyyy HH:mm:ss");
System.out.println(print.format(parsedDate));

Opmerkingen:


Antwoord 2, Autoriteit 7%

       String date="Sat Jun 01 12:53:10 IST 2013";
        SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy");
        Date currentdate=sdf.parse(date);
        SimpleDateFormat sdf2=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
        System.out.println(sdf2.format(currentdate));

Antwoord 3, Autoriteit 5%

Patroon is verkeerd

   String date="Sat Jun 01 12:53:10 IST 2013";
    SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");
    Date currentdate;
    currentdate=sdf.parse(date);
    System.out.println(currentdate);

Antwoord 4, Autoriteit 3%

Update uw formaat naar:

SimpleDateFormat sdf=new SimpleDateFormat("E MMM dd hh:mm:ss Z yyyy");

Antwoord 5, Autoriteit 3%

  • Uw opmaakpatroon komt niet overeen met de invoerreeks, zoals opgemerkt door andere antwoorden.
  • Uw invoerformaat is verschrikkelijk .
  • U gebruikt lastige oude datum-tijdlessen die jaren geleden door de Java.Tijd -klassen werden meegeleverd.

ISO 8601

In plaats daarvan een indeling zoals de jouwe, gebruik ISO 8601 standaardformaten voor het uitwisselen van datum-tijd waarden als tekst.

De JAVA.TIME -klassen gebruiken standaard de standaard ISO 8601-indelingen bij het parseren / genereren van snaren.

juiste tijdzonaam

Geef een juiste tijdzonenaamop in de notatie continent/region, zoals America/Montreal, Africa/Casablanca, of Pacific/Auckland. Gebruik nooit de afkorting van 3-4 letters zoals ESTof ISTaangezien het geenechte tijdzones zijn, niet gestandaardiseerd en zelfs niet uniek( !).

Uw ISTkan Iceland Standard Time, India Standard Time, Ireland Standard Timeof andere betekenen. De klassen java.timeworden overgelaten aan slechts gissen, aangezien er geen logische oplossing is voor deze dubbelzinnigheid.

java.time

De moderne aanpak maakt gebruik van de java.timeklassen.

Definieer een opmaakpatroon dat overeenkomt met uw invoerreeksen.

String input = "Sat Jun 01 12:53:10 IST 2013";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );

zdt.toString(): 2013-06-01T12:53:10Z[Atlantic/Reykjavik]

Als je invoer niet voor IJsland bedoeld was, moet je de tekenreeks voorbereiden om deze aan te passen aan een juiste tijdzonenaam. Als u er bijvoorbeeld zeker van bent dat de invoer voor India was bedoeld, wijzigt u ISTin Asia/Kolkata.

String input = "Sat Jun 01 12:53:10 IST 2013".replace( "IST" , "Asia/Kolkata" );
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM dd HH:mm:ss z uuuu" , Locale.US );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );

zdt.toString(): 2013-06-01T12:53:10+05:30[Azië/Kolkata]


Over java.time

De java.timeframework is ingebouwd in Java 8 en hoger. Deze klassen vervangen de lastige oude legacydatum-tijdklassen zoals java.util.Date, Calendar, & SimpleDateFormat.

Zie voor meer informatie de Oracle-zelfstudie. En zoek Stack Overflow voor veel voorbeelden en uitleg. Specificatie is JSR 310.

Het Joda-Time-project, nu in onderhoudsmodus, adviseert migratie naar de java.timeklassen.

U kunt java.timeobjecten rechtstreeks uitwisselen met uw database. Gebruik een JDBC-stuurprogrammadat voldoet aan JDBC 4.2of hoger. Geen strings nodig, geen java.sql.*klassen. Slaapstand 5 & JPA 2.2 ondersteunt java.time.

Waar zijn de java.time-klassen te verkrijgen?


Antwoord 6, autoriteit 2%

Ik heb een eenvoudige oplossing gevonden om de huidige datum te krijgen zonder enige parseerfout.

Calendar calendar;
calendar = Calendar.getInstance();
String customDate = "" + calendar.get(Calendar.YEAR) + "-" + (calendar.get(Calendar.MONTH) + 1) + "-" + calendar.get(Calendar.DAY_OF_MONTH);

Antwoord 7

String date="Sat Jun 01 12:53:10 IST 2013";
SimpleDateFormat sdf=new SimpleDateFormat("MMM d, yyyy HH:mm:ss");

Dit patroon komt niet overeenmet uw invoertekenreeksdie de uitzonderingvormt.

Je moet het volgende patroongebruiken om het werk gedaan te krijgen.

E MMM dd HH:mm:ss z yyyy

De volgende code helpt u bij Skip de uitzondering .

SimpleDateFormatis gebruikt .

   String date="Sat Jun 01 12:53:10 IST 2013"; // Input String
    SimpleDateFormat simpleDateFormat=new SimpleDateFormat("E MMM dd HH:mm:ss z yyyy"); // Existing Pattern
    Date currentdate=simpleDateFormat.parse(date); // Returns Date Format,
    SimpleDateFormat simpleDateFormat1=new SimpleDateFormat("MMM dd,yyyy HH:mm:ss"); // New Pattern
    System.out.println(simpleDateFormat1.format(currentdate)); // Format given String to new pattern
    // outputs: Jun 01,2013 12:53:10

Antwoord 8

Controleer uw patroon (DD-MMM-JJJJ) en de invoer voor de parse (“29-11-2018”) -methode.
Ingang op de parse-methode moet volgen: DD-MMM-JJJJ I, E. 21-aug-2019

in mijn code:

String pattern = "DD-MMM-YYYY";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
    try {
        startDate = simpleDateFormat.parse("29-11-2018");// here no pattern match 
        endDate = simpleDateFormat.parse("28-AUG-2019");// Ok 
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Antwoord 9

Ik moest een ParsePositionExpressie toe toevoegen aan de PARSE-methode van Klasse SimpleDateFormat:

simpledateformat.parse(mydatestring, new ParsePosition(0));
Previous articleWat is __pycache__?
Next articlePython updaten op Mac

Other episodes