Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SimpleDataFormat显示的日期不正确_Java_Date_Datetime_Simpledateformat - Fatal编程技术网

Java SimpleDataFormat显示的日期不正确

Java SimpleDataFormat显示的日期不正确,java,date,datetime,simpledateformat,Java,Date,Datetime,Simpledateformat,这将为2018年12月31日的日期生成2019年12月31日12:00:00 AM,这是不正确的 将YYYY更改为YYYY以获得正确的输出。 您将获得2019年,因为首府“Y”是一周。 裁判: 日期和时间模式将YYYY更改为YYYY以获得正确的输出。 您将获得2019年,因为首府“Y”是一周。 裁判: 日期和时间模式将格式模式更改为yyyy-MM-dd以获得2018-12-31 private static final String LONG_DATE_PATTERN = "YYYY-MMM-d

这将为2018年12月31日的日期生成2019年12月31日12:00:00 AM,这是不正确的

将YYYY更改为YYYY以获得正确的输出。 您将获得2019年,因为首府“Y”是一周。 裁判:
日期和时间模式将YYYY更改为YYYY以获得正确的输出。 您将获得2019年,因为首府“Y”是一周。 裁判:
日期和时间模式

将格式模式更改为yyyy-MM-dd以获得2018-12-31

private static final String LONG_DATE_PATTERN = "YYYY-MMM-dd hh:mm:ss a";
private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);

    public static String formatWith12HourClock(Date date) {
        return longDateFormat.format(date);
    }

将格式模式更改为yyyy-MM-dd以获得2018-12-31

private static final String LONG_DATE_PATTERN = "YYYY-MMM-dd hh:mm:ss a";
private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);

    public static String formatWith12HourClock(Date date) {
        return longDateFormat.format(date);
    }

这是我在OP的基础上试过的

private static final String LONG_DATE_PATTERN = "yyyy-MM-dd";
private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);

    public static String formatWith12HourClock(Date date) {
        return longDateFormat.format(date);
    } 
输出:

2018-12-31 12:00:00上午

2018-12-31

您的简单日期格式有问题

  • y-->年
  • Y-->周年
您应该在日期模式中将YYYY更改为YYYY


参考:

以下是我根据OP尝试的内容

private static final String LONG_DATE_PATTERN = "yyyy-MM-dd";
private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);

    public static String formatWith12HourClock(Date date) {
        return longDateFormat.format(date);
    } 
输出:

2018-12-31 12:00:00上午

2018-12-31

您的简单日期格式有问题

  • y-->年
  • Y-->周年
您应该在日期模式中将YYYY更改为YYYY


参考:

如其他答案所述,您应该使用
yyyy
而不是
yyyy
。如果您正在使用java8或更高版本,还可以使用
DateTimeFormatterBuilder
来避免使用原始模式,例如:

public class App {
private static final String LONG_DATE_PATTERN = "yyyy-MMM-dd hh:mm:ss a";
private static final String SHORT_DATE_PATTERN = "yyyy-MMM-dd";
    private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);
    private static final SimpleDateFormat shortDateFormat = new SimpleDateFormat(SHORT_DATE_PATTERN);

 public static void main(String[] args) throws Exception {
        Calendar cal = Calendar.getInstance();
        //Input date 2018-Dec-31 12:00:00 AM
        cal.set(2018, 11, 31, 0, 0, 0);

        Date date = cal.getTime();

        System.out.println(longDateFormat.format(date));
        System.out.println(shortDateFormat.format(date));
}
}

如其他答案所述,您应该使用
yyyy
而不是
yyy
。如果您正在使用java8或更高版本,还可以使用
DateTimeFormatterBuilder
来避免使用原始模式,例如:

public class App {
private static final String LONG_DATE_PATTERN = "yyyy-MMM-dd hh:mm:ss a";
private static final String SHORT_DATE_PATTERN = "yyyy-MMM-dd";
    private static final SimpleDateFormat longDateFormat = new SimpleDateFormat(LONG_DATE_PATTERN);
    private static final SimpleDateFormat shortDateFormat = new SimpleDateFormat(SHORT_DATE_PATTERN);

 public static void main(String[] args) throws Exception {
        Calendar cal = Calendar.getInstance();
        //Input date 2018-Dec-31 12:00:00 AM
        cal.set(2018, 11, 31, 0, 0, 0);

        Date date = cal.getTime();

        System.out.println(longDateFormat.format(date));
        System.out.println(shortDateFormat.format(date));
}
}

使用yyyy而不是yyyy,因为yyyy转换为SimpleDataFormat中的周。一年的平均时间正好是52.1775周,这意味着考虑到不可分割的几周,一年最终可能有52周或53周。

使用yyyy而不是yyyy,因为yyyy转换为SimpleDataFormat中的周。一年的平均时间正好是52.1775周,这意味着考虑到不可分割的几周,一年最终可能有52周或53周。

你能展示一下你是如何得到输入日期的吗?希望这会有所帮助:你永远不应该有一个静态的
SimpleDataFormat
实例,因为它不是线程安全的。请参见我建议您避免使用
SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们在中有了更多的内容。您能展示一下您是如何获得输入日期的吗?希望这会有所帮助:您永远不应该有一个静态
SimpleDataFormat
实例,因为它不是线程安全的。请参见我建议您避免使用
SimpleDateFormat
类。它不仅早已过时,而且还出了名的麻烦。今天我们的生活好多了。