如何从 mongodb 检索日期时间?通过将数据与 jDateChooser Java 进行比较

How can I retrieve datetiime from mongodb? By comparing the data with jDateChosser Java

private void showdataTable_btnActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    try {
        DateFormat df = new SimpleDateFormat("YYYY-mm-dd'T'HH:MM:ss'Z'");  //set date format

        String set = df.format(dateChoos1.getDate());           //add value to set

        BasicDBObject whereQuery = new BasicDBObject();
        whereQuery.put("datetimes", set);                       //where date via set(date)

        DBCursor cursor = table.find(whereQuery);
        while (cursor.hasNext()) {
            DBObject obj = cursor.next();
            String ip_address = (String) obj.get("ip_address");
            String mac_address = (String) obj.get("mac_address");
            Date datetimes = (Date) obj.get("datetimes");
            String url = (String) obj.get("url");
            model.insertRow(model.getRowCount(), new Object[]{datetimes, ip_address, mac_address, url});
        }
    } catch (Exception e) {
        System.out.println("Something went wrong.");
    }
}

您的格式 YYYY-mm-dd'T'HH:MM:ss'Z' 不正确。让我们讨论一下这种格式的所有错误。

  1. 您使用了Y而不是y符号Y用于Week yeary 用于 Year。检查 Difference between year-of-era and week-based-year? 以了解更多信息。
  2. 您使用 mm 作为月份: 正确的月份符号是 M.
  3. 您已使用 MM 分钟: 分钟的正确符号是 m.
  4. 您已将 Z 括在单引号内: 符号 Z 用于 Time zone'Z' 是只不过是一个字符文字。可能您想将 +00:00 的时区偏移量格式化为 Z,为此,您实际上应该使用 X.

所以,正确的格式如下:

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

建议格式的演示:

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

输出:

2021-01-14T08:13:01Z

请注意 java.util 的日期时间 API 及其格式 API、SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到 modern date-time API.

  • 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它向后移植了大部分 java.time Java 6 和 7 的功能。
  • 如果您正在为 Android 项目工作,并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and

使用Date#toInstant to convert a java.util.Date object (the legacy type) to java.time.Instant (the modern type). Instant represents an instantaneous point on the time-line and should be just enough for most of your JSON operations. The Instant#toString returns the date-time string with UTC timezone offset which is compliant with ISO-8601 standards.

演示:

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

输出:

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