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中的简单日期格式化程序格式化为dd-3字母月yyyy?_Java_Date_Simpledateformat - Fatal编程技术网

如何将Java中的简单日期格式化程序格式化为dd-3字母月yyyy?

如何将Java中的简单日期格式化程序格式化为dd-3字母月yyyy?,java,date,simpledateformat,Java,Date,Simpledateformat,我有一个简单的日期格式化程序,格式如下: private static final String DATE_FORMAT = "yyyy-MM-dd"; private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(DATE_FORMAT); //accessExpiryDate is a Date object DATE_FORMATTER.format(accessExpiryDate); 它正在将日

我有一个简单的日期格式化程序,格式如下:

private static final String DATE_FORMAT = "yyyy-MM-dd";
private static final SimpleDateFormat DATE_FORMATTER = new SimpleDateFormat(DATE_FORMAT);
//accessExpiryDate is a Date object
DATE_FORMATTER.format(accessExpiryDate);
它正在将日期格式化为yyyy-MM-dd。但我想将日期格式化为“2019年6月1日”。日期+月份的前3个字母+年份


我怎样才能做到这一点?是否有一种简单的方法/方法/类,或者我应该编写自定义日期格式化程序方法?

由于您已将日期格式指定为
yyyy-MM-dd
,因此其格式如下。只需将日期格式修改为预期格式即可


e、 g:
d MMM-yyyy

正如@JonSkeet所建议的,您应该阅读API文档。
无论如何,格式应该是您的案例
d MMM yyyy

java.time 不要使用
日期
简化格式
。这些类设计得很糟糕,而且早已过时,后者尤其是出了名的麻烦。正如Jon Skeet所说,为了获得更好的体验,请转到java.time,即现代java日期和时间API

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d MMM u", Locale.ENGLISH);
    LocalDate ld = LocalDate.of(2019, Month.JUNE, 1);
    System.out.println(ld.format(dateFormatter));
此代码段的输出为:

2019年6月1日

许多格式模式字母(包括月份的
M
)可以生成一个数字或一个文本,具体取决于您在格式模式字符串中输入的字母数量(这对于
DateTimeFormatter
和传统的
SimpleDateFormat
都是如此)。因此,
MM
为您提供两位数的月份编号,而
MMM
为您提供月份缩写(通常为三个字母,但在某些语言中可能更长或更短)

如果您从旧式API中获取一个过时的
Date
对象,而您现在无法更改或不想升级该对象,则可以将其转换为如下所示:

    Date accessExpiryDate = getFromLegacyApi();
    LocalDate ld = accessExpiryDate.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDate();
其余的和以前一样。现在,您已经开始使用现代API,并且可以按照自己的速度朝这个方向迁移代码库


链接:解释如何使用java.time。

我建议阅读-但是,如果您可以使用java.time而不是java.text/java.util,您会有更好的体验。my date是一个just date类。您是否尝试过将date_格式从“yyyy MM dd”更改为“d MMM YYYYYY”@abidinberkay:是的,我建议,如果你可以移动到
java.time.LocalDateTime
java.time.Instant
等,你会有更好的体验。我建议你不要使用
SimpleDateFormat
Date
。这些类设计得很糟糕,而且早已过时,其中前者尤其令人讨厌。而是使用
LocalDate
DateTimeFormatter
,两者都来自。