格式化日期不含年份

fhu*_*cho 28 java date

如何创建某个日期的文本表示,将区域设置考虑在内并且仅包含日期和月份(没有年份)?

以下代码给了我类似于23/09/2010的内容

DateFormat.getDateInstance(DateFormat.SHORT, Locale.getDefault()).format(date);
Run Code Online (Sandbox Code Playgroud)

我想得到23/09

uni*_*ify 44

这适用于Android,以防有人需要它:

int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_NO_YEAR;
String monthAndDayText = DateUtils.formatDateTime(context, date, flags);
Run Code Online (Sandbox Code Playgroud)


Bal*_*usC 23

y如果有的话,您可以使用正则表达式修剪所有和之前和之后的非字母字符.这是一个启动示例:

public static void main(String[] args) throws Exception {
    for (Locale locale : Locale.getAvailableLocales()) {
        DateFormat df = getShortDateInstanceWithoutYears(locale);
        System.out.println(locale + ": " + df.format(new Date()));      
    }
}

public static DateFormat getShortDateInstanceWithoutYears(Locale locale) {
    SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.SHORT, locale);
    sdf.applyPattern(sdf.toPattern().replaceAll("[^\\p{Alpha}]*y+[^\\p{Alpha}]*", ""));
    return sdf;
}
Run Code Online (Sandbox Code Playgroud)

您会看到此代码段也会针对所有区域设置对其进行测试.它看起来适用于所有语言环境.

  • 这对所有语言环境都不适用.例如,德语语言环境的正确模式是"dd.MM.",而不是"dd.MM".我认为这与使用点分隔日/月/年的其他语言环境类似.所以,正则表达式应该可以改为`[^ \\ p {Alpha} \\.]*y + [^ \\ p {Alpha}]*` (5认同)
  • @Gro:这不是OP所要求的.用`return new SimpleDateFormat("dd/MM",locale)替换方法;`并运行自己.您将看到区域设置仅用于表示特定于语言环境的语言中的日/月(在我的情况下,它仅用于泰语).尝试使用`MMMM`而不是'MM`,你会看到月份名称被相应翻译.它不会重新排列模式. (4认同)
  • 我尝试了这种方法来解决使用日语作为Locale时发现的错误.我们只想要MMMM和Year,我们希望它们按照Locale的正确顺序.未经修改的sdf模式如下所示:y年M月d日,正则表达式模式如下:年M月d日.年 - 字符(年)仍然存在.似乎不可能获得灵活但仍然是Locale控制的日期格式.:( (2认同)

And*_*bis 8

只想在模式中提供另一个修改删除年份,这适用于DateFormat.MEDIUM,即使在诸如pt_PT(d'de'MMM'de'yyyy)或lv_LV(y.'gada'd.MMM)之类的语言环境中也是如此.

public static DateFormat getMediumDateInstanceWithoutYears()
 {
   SimpleDateFormat sdf = (SimpleDateFormat) DateFormat.getDateInstance(DateFormat.MEDIUM);
   sdf.applyPattern(sdf.toPattern().replaceAll(
       "([^\\p{Alpha}']|('[\\p{Alpha}]+'))*y+([^\\p{Alpha}']|('[\\p{Alpha}]+'))*",
       ""));
   return sdf;
 }
Run Code Online (Sandbox Code Playgroud)