7

我尝试使用以下代码将日期作为字符串。但它返回错误的字符串。我可以用这段代码修复它吗?

private String getDayOfWeek(int value){
    String day = "";
    switch(value){
    case 1:
        day="Sunday";
        break;
    case 2:
        day="Monday";
        break;
    case 3:
        day="Tuesday";
        break;
    case 4:
        day="Wednesday";
        break;
    case 5:
        day="Thursday";
        break;
    case 6:
        day="Friday";
        break;
    case 7:
        day="Saturday";
        break;
    }
    return day;

我将其实现为

Calendar c = Calendar.getInstance();    
String dayOfWeek = getDayOfWeek(Calendar.DAY_OF_WEEK);
System.out.println(dayOfWeek);
4

8 回答 8

17

你需要使用

String dayOfWeek = getDayOfWeek(c.get(Calendar.DAY_OF_WEEK));

你之前在做什么

String dayOfWeek = getDayOfWeek(Calendar.DAY_OF_WEEK);

使用随机常量(恰好是 7)调用您的方法,Calendar该类用于表示DAY_OF_WEEK日期中的字段。

您实际上正在寻找的是在您的实例中获取星期几的值Calendar,这就是Calendar#get(int)

c.get(Calendar.DAY_OF_WEEK)

返回。


在相关说明中,尝试学习和使用评论中所述的实际调试器。

于 2013-09-18T21:15:05.303 回答
13

使用日历对象中的 getdisplayname 方法。

Calendar currentDate=new GregorianCalendar();

String dayOfWeek = currentDate.getDisplayName( Calendar.DAY_OF_WEEK ,Calendar.LONG, Locale.getDefault());
于 2015-03-30T11:36:46.840 回答
10

我认为获得星期几的最好方法是使用这个简单的代码片段:

Date date = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEEE");
String dayOfWeek = dateFormat.format(date);
System.out.println(dayOfWeek);

如果您想使用日历:

Calendar c = Calendar.getInstance();
SimpleDateFormat dateFormat = new SimpleDateFormat("EEEEE");
String dayOfWeek = dateFormat.format(c.getTime());
System.out.println(dayOfWeek);

格式“EEEEE”返回星期几:星期日,星期一.. 以机器的语言,最好在代码上用英文修复。

[更新]

使用 Java 8+ 并引入 java.time 包,您可以通过以下方式实现:

import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.format.TextStyle;
import java.util.Locale;

class Example {
  public static void main(String[] args) {
    final DayOfWeek dayOfWeek = LocalDateTime.now().getDayOfWeek();
    System.out.println(dayOfWeek.getDisplayName(TextStyle.FULL, Locale.US));
  }
}

在您想要的语言环境中,也选择 TextStyle:

  • 满:周五
  • 短:周五
  • 窄:F
于 2014-02-04T13:07:59.093 回答
6

DayOfWeek::getDisplayName

自 Java 8 以来,使用 DateTime API 有一种很好的方法

LocalDate localDate = LocalDate.parse("2018-08-29");
DayOfWeek dayOfWeek = localDate.getDayOfWeek();
String displayName = dayOfWeek.getDisplayName(TextStyle.FULL, Locale.ENGLISH);

现在displayName等于Wednesday

DayOfWeek.of(int dayOfWeek)不需要 switch 语句。

按编号

要访问DayOfWeek问题中看到的按数字,请根据 ISO 8601 标准使用 1-7 表示周一至周日。

DayOfWeek.of( 1 ).getDisplayName(TextStyle.FULL, Locale.ENGLISH)

周一

通过常数

或者使用七个命名枚举对象之一。

DayOfWeek.MONDAY.getDisplayName(TextStyle.FULL, Locale.ENGLISH)

周一

于 2018-08-29T09:58:55.263 回答
4

您可以SimpleDateFormat为此使用 a:

SimpleDateFormat formatter = new SimpleDateFormat("EEEE");
System.out.println(formatter.format(new Date());

这将返回一周中当前日期的字符串表示形式。

于 2013-09-18T21:18:06.533 回答
3

下面是使用 Java 1.8 Time API 的两行代码段。

LocalDate localDate = LocalDate.of(Integer.valueOf(year),Integer.valueOf(month),Integer.valueOf(day));
String dayOfWeek = String.valueOf(localDate.getDayOfWeek());
于 2017-12-24T16:02:07.583 回答
3

您可以使用以下方法通过传递特定日期来获取星期几,

这里对于 Calendar 类的 set 方法,Tricky 部分是月份参数的索引将从 0 开始

public static String getDay(int day, int month, int year) {

        Calendar cal = Calendar.getInstance();

        if(month==1){
            cal.set(year,0,day);
        }else{
            cal.set(year,month-1,day);
        }

        int dow = cal.get(Calendar.DAY_OF_WEEK);

        switch (dow) {
        case 1:
            return "SUNDAY";
        case 2:
            return "MONDAY";
        case 3:
            return "TUESDAY";
        case 4:
            return "WEDNESDAY";
        case 5:
            return "THURSDAY";
        case 6:
            return "FRIDAY";
        case 7:
            return "SATURDAY";
        default:
            System.out.println("GO To Hell....");
        }

        return null;
    }
于 2017-11-02T17:44:04.353 回答
0

另一种蛮力方式是

List<String> days = Arrays.asList( new String[] {"sunday","monday", "tuesday", "wednesday","thursday","friday","saturday"});

您可以将其用作days.get( <your input value> );

于 2019-12-16T08:51:08.910 回答