【问题标题】:How to get localized short day-in-week name (Mo/Tu/We/Th...)如何获得本地化的短星期名称(Mo/Tu/We/Th...)
【发布时间】:2011-04-16 23:57:53
【问题描述】:

我可以在 Java 中获得本地化的短星期名称(英语为 Mo/Tu/We/Th/Fr/Sa/Su)吗?

【问题讨论】:

    标签: java calendar java-time dayofweek weekday


    【解决方案1】:

    最好的方法是使用 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 
    

    【讨论】:

    • 请注意,dayNames 数组将包含 8 个元素,第一个元素是一个空字符串,因此该数组可以直接使用星期天为 1,星期六为 7 的天数进行索引。
    • 仅供参考,非常麻烦的旧日期时间类,如 java.util.Date、java.util.Calendar 和 java.text.SimpleDateFormat 现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。
    【解决方案2】:

    如果您可以使用标准缩写,只需像这样使用 Calendar 类:

    myCal.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.US);
    

    【讨论】:

    • 这是获得它的好方法。
    • 内部日历无论如何都会调用 DateFormatSymbols.getShortWeekdays。
    • 简单的方法。太棒了
    【解决方案3】:

    使用 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 推荐这种方法。

    【讨论】:

    • 这不是最好的答案吗?
    【解决方案4】:

    java.time

    为使用 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

    【讨论】:

      【解决方案5】:

      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
      

      【讨论】:

        【解决方案6】:

        您不能使用 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
        

        【讨论】:

        • 谢谢!将它放入 String 的最简单方法是什么?
        • 不错的答案,请检查您在示例中放置的链接..它显示 404
        【解决方案7】:
        //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)+"'");
        }            
        

        【讨论】:

          猜你喜欢
          • 2012-01-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-28
          • 2010-10-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多