如何从 Android 中选定的日期月份和年份中获取星期几名称?

How to get day of week name from selected date month and year in Android?

我试过下面的代码,但它给了我两天前星期几的名称。

  DatePicker picker;
  int date = picker.DayOfMonth;
  int month = (picker.Month + 1);//month is 0 based
  int year = picker.Year;

  SimpleDateFormat simpledateformat = new SimpleDateFormat("EEE");
  Date dt = new Date(year, month, date);
SimpleDateFormat dateFormat = new SimpleDateFormat("EEE", Locale.US); 
String asWeek = dateFormat.format(dt);

首先使用 SimpleDateFormat

将您的日期转换为特定的日期格式

使用 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE"); 获取周中的日期名称

WHERE EEEE -> 星期中的日期名称

示例代码

 SimpleDateFormat inFormat = new SimpleDateFormat("dd-MM-yyyy");
 try {
       Date myDate = inFormat.parse(date+"-"+month+"-"+year);
       SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
       String dayName=simpleDateFormat.format(myDate);
 } catch (ParseException e) {
     e.printStackTrace();
}
    DateTimeFormatter dayOfWeekFormatter 
            = DateTimeFormatter.ofPattern("EEE", Locale.ENGLISH);
    LocalDate date = LocalDate.of(
            picker.getYear(), picker.getMonth(), picker.getDayOfMonth());
    System.out.println(date.format(dayOfWeekFormatter));

正在挑选 2018-04-09 这本印刷品

Mon

我正在使用并推荐 java.time,现代 Java 日期和时间 API。 Date class 早已过时,您使用的是已弃用的构造函数。它已被弃用,因为它在跨时区工作不可靠,所以你不应该。 SimpleDateFormat 不仅过时,而且出了名的麻烦。我建议您完全避免使用那些 classes。现代 API 更好用。

你的代码出了什么问题?

除了使用已弃用的 Date 构造函数和过时的 classes:

之外,您还有两个错误
  1. Date的月份是从0开始的(不是DatePicker的月份),所以你需要减1,而不是加1(或者它们都是从0开始的) ??).
  2. 已弃用的 Date 构造函数年份是“基于 1900 年”。在 1990 年代设计 class 时,这似乎是个好主意:您只需指定 95 即可获得 1995。当您将 2018 传递给构造函数时,您将获得 3918 年。没错。 :-(

问题:我可以在 Android 上使用 java.time 吗?

是的,java.time 在新旧 Android 设备上都能很好地工作。它只需要至少 Java 6.

  • 在 Java 8 和更高版本以及较新的 Android 设备上(据我所知,来自 API 26 级)现代 API 出现 built-in.
  • 在 Java 6 和 7 中获取 ThreeTen Backport,新 classes 的 backport(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 使用 ThreeTen Backport 的 Android 版本。它叫做 ThreeTenABP。并确保使用子包从 org.threeten.bp 导入日期和时间 classes。

链接

Calendar calendar = Calendar.getInstance(); DateFormat date4= new SimpleDateFormat("EEEE", Locale.getDefault()); String localTime4 = date4.format(calendar.getTime());

简单易行的方法 就用这个