如何获得日期的工作日?

时间:2013-09-03 19:43:34

标签: android date calendar

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

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();
    }

有人知道答案吗?

5 个答案:

答案 0 :(得分:23)

您可以像这样获得日整数

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

如果您需要输出为“Tue”而不是3,而不是通过日历,只需重新格式化字符串:new SimpleDateFormat("EE").format(date)(EE表示“星期几,短版本“)

从这里采取:How to determine day of week by passing specific date?

答案 1 :(得分:2)

// kotlin

val calendar = Calendar.getInstance()

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

data.text = dateInfo

答案 2 :(得分:0)

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

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

输出:

SUNDAY

当然,我们现在在一周中的每一天都有一个枚举。不再有任何理由摆弄整数,也不必记住它们在一周的哪一天开始,以及这些天是从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,这是现代类的backport(JSR 310的ThreeTen;请参见底部的链接)。
  • 在旧版Android上,请使用Android版的ThreeTen Backport。称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

答案 3 :(得分:0)

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

modern date-time API 中了解有关 Trail: Date Time* 的更多信息。


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

答案 4 :(得分:0)

在 Kotlin 中,只需执行以下操作:

val yourDateStr = "2021-01-01"
val df = DateFormat.parse(yourDateStr)
val weedDay = df.getWeekDay(yourTimeZone)