MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come posso recuperare datetiime da mongodb? Confrontando i dati con jDateChosser Java

Il tuo formato, YYYY-mm-dd'T'HH:MM:ss'Z' non è corretto. Discutiamo di tutto ciò che non va in questo formato.

  1. Hai usato Y invece di y : Il simbolo Y è usato per Week year mentre y è usato per Year . Controlla Differenza tra anno-di- era e settimana-anno? per saperne di più.
  2. Hai usato mm per mese: Il simbolo corretto per il mese è M .
  3. Hai usato MM per minuti: Il simbolo corretto per il minuto è m .
  4. Hai racchiuso Z tra virgolette singole: Il simbolo, Z è usato per Time zone mentre 'Z' non è altro che un carattere letterale. Probabilmente vuoi formattare l'offset del fuso orario di +00:00 come Z e per questo dovresti infatti usare X .

Quindi, il formato corretto è il seguente:

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

Una demo con il formato suggerito:

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));
    }
}

Risultato:

2021-01-14T08:13:01Z

Nota che l'API data-ora di java.util e la loro API di formattazione, SimpleDateFormat sono obsoleti e soggetti a errori. Si consiglia di smettere di usarli completamente e passare a API data-ora moderna .

Usa Date#toInstant per convertire un java.util.Date oggetto (il tipo legacy) in java.time.Instant (il tipo moderno). Instant rappresenta un punto istantaneo sulla linea temporale e dovrebbe essere appena sufficiente per la maggior parte delle tue operazioni JSON. Il Instant#toString restituisce la stringa data-ora con offset del fuso orario UTC conforme agli standard ISO-8601 .

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));
    }
}

Risultato:

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