17

Date当我有一个Datein String数组时,我想从 Java 对象中获取星期几。

SimpleDateFormat  sourceDateformat = new SimpleDateFormat("yyyy-MM-dd");
public String[] temp_date;
public Int[] day = new Int[5];
Date[] d1= new Date[5];
Calendar[] cal= new Calendar[5]

  try {
     d1[i]= sourceDateformat.parse(temp_date[i].toString());
     cal[i].setTime(d1[i]);   // its not compiling this line..showing error on this line
     day[i]= cal[i].get(Calendar.DAY_OF_WEEK);      
    } 
 catch (ParseException e) {
        e.printStackTrace();
    }

有谁知道这个问题的答案?

4

6 回答 6

40

You can get the day-integer like that:

Calendar c = Calendar.getInstance();
c.setTime(yourdate); // yourdate is an object of type Date

int dayOfWeek = c.get(Calendar.DAY_OF_WEEK); // this will for example return 3 for tuesday

If you need the output to be "Tue" rather than 3, instead of going through a calendar, just reformat the string: new SimpleDateFormat("EE").format(date) (EE meaning "day of week, short version")

Taken from here: How to determine day of week by passing specific date?

于 2013-09-03T19:48:59.893 回答
2
// kotlin

val calendar = Calendar.getInstance()

val dateInfo = DateFormat.getDateInstance(DateFormat.FULL).format(calendar.time)

data.text = dateInfo
于 2020-03-24T21:47:19.270 回答
1

java.time

您可以使用DateTimeFormatter.ofPattern("EEEE")

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main {
    public static void main(String args[]) {
        // Test
        System.out.println(getWeekDayName("2021-04-30"));
    }

    public static String getWeekDayName(String s) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d", Locale.ENGLISH);
        DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
        return LocalDate.parse(s, dtfInput).format(dtfOutput);
    }
}

输出:

Friday

或者,您可以使用以下方式获取它LocalDate#getDayOfWeek

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.TextStyle;
import java.util.Locale;

public class Main {
    public static void main(String args[]) {
        // Test
        System.out.println(getWeekDayName("2021-04-30"));
    }

    public static String getWeekDayName(String s) {
        DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("u-M-d", Locale.ENGLISH);
        return LocalDate.parse(s, dtfInput).getDayOfWeek().getDisplayName(TextStyle.FULL, Locale.ENGLISH);
    }
}

输出:

Friday

Trail: Date Time了解有关现代日期时间 API *的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-04-30T11:36:39.870 回答
0

这是随着现代 Java 日期和时间 API java.time 的出现而变得容易得多的许多事情之一。

    String tempDate = "2020-03-29";
    LocalDate date = LocalDate.parse(tempDate);
    DayOfWeek day = date.getDayOfWeek();
    System.out.println(day);

输出:

星期日

当然,我们现在有一周中的几天的枚举。不再有任何理由去摆弄整数,而不必记住它们从星期几开始以及这些天是从 0 还是从 1 编号的。

我要说明的是您的预期输入格式(yyyy-MM-dd在您的代码中)是 ISO 8601,这是 java.time 的默认格式,因此我们不需要明确指定任何格式化程序。

问题:java.time 不需要 Android API 级别 26 吗?

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

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,现代 API 是内置的。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的后向端口(ThreeTen 用于 JSR 310;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从org.threeten.bp子包中导入日期和时间类。

链接

于 2020-03-25T05:55:53.510 回答
0

下面的代码有效,具体取决于您在 DAY_OF_WEEK 中输入的数字,它返回特定的工作日,在此示例中,它始终返回未来的日期,而日期始终是星期二。

DAY_OF_WEEK

public static String getTodaysDateAndTime(){

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.DATE, 5);
    cal.add(Calendar.DAY_OF_WEEK, 2);
    Date date = cal.getTime();
    SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    String futureDate = dateformat.format(date);
    System.out.println(futureDate);
    return futureDate;
}
于 2021-11-15T12:09:39.903 回答
0

在 Kotlin 中,只需这样做:

val yourDateStr = "2021-01-01"
val df = DateFormat.parse(yourDateStr)
val weedDay = df.getWeekDay(yourTimeZone)
于 2021-07-02T11:12:12.470 回答