在java中获取日期的一个字母缩写

Ser*_*des 15 java format android date

据我所知,在Java中我可以在正常(星期五)或短模式(星期五)获得工作日.但是,有没有办法只获得第一个字母?

我以为我可以使用"substring"获得第一个字母,但它对所有语言都不正确.例如,西班牙人的工作日是:Lunes,Martes,Miércoles,Jueves,Viernes,Sábado和Domingo,"Miércoles"的第一个字母是X而不是M,以区别于"Martes".

小智 10

在Android中,您可以将SimpleDateFormat与"EEEEE"一起使用.在下一个例子中,您可以看到它.

SimpleDateFormat formatLetterDay = new SimpleDateFormat("EEEEE",Locale.getDefault());
String letter = formatLetterDay.format(new Date());
Run Code Online (Sandbox Code Playgroud)

  • 对于API 16或更早版本,`DateUtils.getDayOfWeekString(dayOfWeek,DateUtils.LENGTH_SHORTEST) (5认同)
  • 这不适用于API 16,它返回全天名称.API 18及更高版本似乎工作正常. (3认同)
  • 怎么没有写在这里:https://developer.android.com/reference/java/text/SimpleDateFormat.html? (2认同)

Bra*_*ude 6

如上所述,没有标准的Java支持.但是,使用格式化字符串"EEEEE"并不能保证在所有Android设备上都能正常工作.以下代码保证可在任何设备上运行:

public String firstLetterOfDayOfTheWeek(Date date) {

    Locale locale = Locale.getDefault(); 
    DateFormat weekdayNameFormat = new SimpleDateFormat("EEE", locale); 
    String weekday = weekdayNameFormat.format(date); 
    return weekday.charAt(0)+""; 
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 5

没有标准的 Java API 支持执行此操作1

\n

部分原因是许多(甚至可能是大多数)语言没有传统的独特的单字母工作日缩写。例如,英语中没有 (MTWTFSS)。

\n

在许多/大多数语言环境中不起作用的(假设的)格式选项2将成为国际化的障碍而不是帮助。

\n
\n

有人指出:

\n
SimpleDateFormat formatLetterDay = \n    new SimpleDateFormat("EEEEE", Locale.getDefault());\nString letter = formatLetterDay.format(new Date());\n
Run Code Online (Sandbox Code Playgroud)\n

给出了更高版本的 Android(18 及更高版本)的一个字母缩写,尽管 javadocs没有提及这一点。看来这个“5 个字母”的格式是从javadocDateTimeFormatter中借用的:

\n
\n

模式字母的数量决定了格式。

\n

文本:文本样式根据使用的模式字母的数量确定。少于 4 个模式字母将使用缩写形式。正好 4 个模式字母将使用完整形式。正好 5 个模式字母将使用窄形式。...

\n
\n

如果您的目标是 Android API 26 或更高版本,则应考虑使用这些java.time.*类而不是旧类。

\n

但无论哪种方式,这都不能保证为您提供独特的日期信件。

\n
\n

1 - 我所说的“that”是指映射到唯一的1 字母缩写。
\n2 - 我的意思是它在人类意义上不起作用。你可以发明一个约定,但一般人不会理解缩写的含义;例如,他们不知道“X”意味着“Mi\xc3\xa9rcoles”,或者在英语中“R”意味着“星期四”(参见/sf/answers/1473441861/) 。

\n