MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Wie kann ich datetiime von mongodb abrufen? Durch Abgleich der Daten mit jDateChosser Java

Ihr Format, YYYY-mm-dd'T'HH:MM:ss'Z' das ist nicht richtig. Lassen Sie uns alles diskutieren, was mit diesem Format nicht stimmt.

  1. Sie haben Y verwendet statt y : Das Symbol Y wird für Week year verwendet während y wird für Year verwendet . Überprüfen Sie Difference between year-of- Ära und wochenbasiertes Jahr? um mehr darüber zu erfahren.
  2. Sie haben mm verwendet für Monat: Das richtige Symbol für den Monat ist M .
  3. Sie haben MM verwendet minutenlang: Das korrekte Symbol für die Minute ist m .
  4. Sie haben Z beigefügt in einfachen Anführungszeichen: Das Symbol Z wird für Time zone verwendet wohingegen 'Z' ist nichts anderes als ein Zeichenliteral. Wahrscheinlich möchten Sie den Zeitzonen-Offset von +00:00 formatieren als Z und dafür sollten Sie eigentlich X verwenden .

Das richtige Format lautet also wie folgt:

yyyy-MM-dd'T'HH:mm:ssX

Eine Demo mit dem vorgeschlagenen Format:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        System.out.println(sdf.format(date));
    }
}

Ausgabe:

2021-01-14T08:13:01Z

Beachten Sie, dass die Date-Time-API von java.util und ihre Formatierungs-API, SimpleDateFormat sind veraltet und fehleranfällig. Es wird empfohlen, diese vollständig einzustellen und auf moderne Datum-Uhrzeit-API .

Verwenden Sie Date#toInstant um ein java.util.Date umzuwandeln Objekt (der alte Typ) zu java.time.Instant (der moderne Typ). Instant stellt einen augenblicklichen Punkt auf der Zeitachse dar und sollte für die meisten Ihrer JSON-Operationen gerade ausreichen. Der Instant#toString gibt die Datum-Uhrzeit-Zeichenfolge mit UTC-Zeitzonen-Offset zurück, die den ISO-8601-Standards entspricht .

Demo:

import java.time.Instant;
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        Date date = calendar.getTime();
        Instant instant = date.toInstant();
        // Print the value of instant#toString
        System.out.println(instant);

        OffsetDateTime odt = instant.atOffset(ZoneOffset.UTC);
        System.out.println(odt);
        // Custom format
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ssX", Locale.ENGLISH);
        System.out.println(dtf.format(odt));
    }
}

Ausgabe:

2021-01-14T08:28:35.659Z
2021-01-14T08:28:35.659Z
2021-01-14T08:28:35Z