【发布时间】:2011-04-16 23:57:53
【问题描述】:
我可以在 Java 中获得本地化的短星期名称(英语为 Mo/Tu/We/Th/Fr/Sa/Su)吗?
【问题讨论】:
标签: java calendar java-time dayofweek weekday
我可以在 Java 中获得本地化的短星期名称(英语为 Mo/Tu/We/Th/Fr/Sa/Su)吗?
【问题讨论】:
标签: java calendar java-time dayofweek weekday
最好的方法是使用 java.text.DateFormatSymbols
DateFormatSymbols symbols = new DateFormatSymbols(new Locale("it"));
// for the current Locale :
// DateFormatSymbols symbols = new DateFormatSymbols();
String[] dayNames = symbols.getShortWeekdays();
for (String s : dayNames) {
System.out.print(s + " ");
}
// output : dom lun mar mer gio ven sab
【讨论】:
java.util.Date、java.util.Calendar 和 java.text.SimpleDateFormat 现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。
如果您可以使用标准缩写,只需像这样使用 Calendar 类:
myCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);
【讨论】:
使用 SimpleDateFormat 的示例:
Date now = new Date();
// EEE gives short day names, EEEE would be full length.
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US);
String asWeek = dateFormat.format(now);
SimpleDateFormat 比 C 风格的 String.format 和 System.out.printf 存在的时间更长,我认为您会发现大多数 Java 开发人员会更熟悉它并且更多地用于现有代码库,所以我d 推荐这种方法。
【讨论】:
为使用 Java 8 及更高版本的用户更新。
ZoneId zoneId = ZoneId.of("America/Los_Angeles");
Instant instant = Instant.now();
ZonedDateTime zDateTime = instant.atZone(zoneId);
DayOfWeek day = zDateTime.getDayOfWeek();
显示输出。
System.out.println(day.getDisplayName(TextStyle.SHORT, Locale.US));
System.out.println(day.getDisplayName(TextStyle.NARROW, Locale.US));
运行时。查看类似的code run live at IdeOne.com。
周二
T
【讨论】:
DateTimeFormatter#localizedBy从Java SE 10开始,您可以使用DateTimeFormatter#localizedBy。
演示:
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
DateTimeFormatter dtfHindi = DateTimeFormatter.ofPattern("E").localizedBy(Locale.forLanguageTag("hi"));
DateTimeFormatter dtfBangla = DateTimeFormatter.ofPattern("E").localizedBy(Locale.forLanguageTag("bn"));
DateTimeFormatter dtfGerman = DateTimeFormatter.ofPattern("E").localizedBy(Locale.forLanguageTag("de"));
DateTimeFormatter dtfEnglish = DateTimeFormatter.ofPattern("E").localizedBy(Locale.forLanguageTag("en"));
// Replace ZoneId.systemDefault() with the applicable timezone e.g.
// ZoneId.of("Asia/Calcutta")
LocalDate today = LocalDate.now(ZoneId.systemDefault());
System.out.println(dtfHindi.format(today));
System.out.println(dtfBangla.format(today));
System.out.println(dtfGerman.format(today));
System.out.println(dtfEnglish.format(today));
}
}
输出:
शुक्र
শুক্র
Fr.
Fri
或者,从 Java SE 8 开始,您可以使用 DayOfWeek#getDisplayName 和适用的 Locale。
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.format.TextStyle;
import java.util.Locale;
public class Main {
public static void main(String args[]) {
// Replace ZoneId.systemDefault() with the applicable timezone e.g.
// ZoneId.of("Asia/Calcutta")
LocalDate today = LocalDate.now(ZoneId.systemDefault());
System.out.println(today.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.forLanguageTag("hi")));
System.out.println(today.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.forLanguageTag("bn")));
System.out.println(today.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.forLanguageTag("de")));
System.out.println(today.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.forLanguageTag("en")));
}
}
输出:
शुक्र
শুক্র
Fr.
Fri
【讨论】:
您不能使用 Calendar 类(除非您自己编写),但您可以使用 Date 类。 (两者通常并用)。
这是一个例子:
import java.util.Date;
public class DateFormatExample {
public static void main(String[] args) {
Calendar nowCal = Calendar.getInstance(); // a Calendar date
Date now = new Date(nowCal.getTimeInMillis()); // convert to Date
System.out.printf("localized month name: %tB/%TB\n", now, now);
System.out.printf("localized, abbreviated month: %tb/%Tb\n", now, now);
System.out.printf("localized day name: %tA/%TA\n", now, now);
System.out.printf("localized, abbreviated day: %ta/%Ta\n", now, now);
}
}
输出:
localized month name: June/JUNE
localized, abbreviated month: Jun/JUN
localized day name: Friday/FRIDAY
localized, abbreviated day: Fri/FRI
【讨论】:
//you need to use joda library
List<String> dayList = new ArrayList<String>();
String[] days = new String[7];
int a=2;
//a =starting day of week 1=sunday ,2=monday
Calendar c2 = Calendar.getInstance();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
c2.set((Calendar.DAY_OF_WEEK),a);
int maxDay = c2.getActualMaximum(Calendar.DAY_OF_WEEK);
for(int i=0;i<maxDay;i++)
{
days[i] = df.format(c2.getTime());
c2.add(Calendar.DAY_OF_MONTH, 1);
String dayOfWeek = new LocalDate( days[i]).dayOfWeek().getAsShortText();
dayList.add(dayOfWeek);
}
for(int i=0;i<maxDay;i++)
{
System.out.print(" '"+dayList.get(i)+"'");
}
【讨论】: