我想在 Java 中找出日期中的日期,例如27-04-2011

我尝试使用它,但它不起作用:

Calendar cal = Calendar.getInstance();
int val = cal.get(Calendar.DAY_OF_WEEK);

它给出了整数值,而不是我想要的字符串输出。 我没有得到我想要的正确值。 例如,它给我28-02-2011日期的值4 ,它应该是 2,因为星期日是第一个工作日。

#1楼 票数:9 已采纳

是的,您已经询问了星期几 - 2 月 28 日是星期一,第 2 天 请注意,在您提供的代码中,您实际上并未在任何地方设置日期 - 它只是使用当前日期,即星期三,这就是您得到 4 的原因。如果您能展示您的尝试方式将日历设置为不同的日期(例如 2 月 28 日),我们可以找出为什么这对您不起作用。

如果您希望将其格式化为文本,则可以使用SimpleDateFormat和“E”说明符。 例如(未经测试):

SimpleDateFormat formatter = new SimpleDateFormat("EEE");
String text = formatter.format(cal.getTime());

就我个人而言,我会完全避免使用Calendar - 使用Joda Time ,这是一个非常优越的日期和时间 API。

#2楼 票数:3

Calendar cal=Calendar.getInstance();
System.out.println(new SimpleDateFormat("EEE").format(cal.getTime()));

输出

Wed

也可以看看

#3楼 票数:3

  String dayNames[] = new DateFormatSymbols().getWeekdays();
  Calendar date1 = Calendar.getInstance();
  System.out.println("Today is a " 
    + dayNames[date1.get(Calendar.DAY_OF_WEEK)]);

#4楼 票数:2

时间

java.util Date-Time API 及其格式化 API SimpleDateFormat已过时且容易出错。 建议完全停止使用它们并切换到现代 Date-Time API *

另外,下面引用的是Joda-Time 主页上的通知:

请注意,从 Java SE 8 开始,要求用户迁移到 java.time (JSR-310) - 替代该项目的 JDK 的核心部分。

使用现代日期时间 API java.time解决方案:

import java.time.DayOfWeek;
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) {
        String input = "27-04-2011";
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d-M-u", Locale.ENGLISH);
        LocalDate date = LocalDate.parse(input, dtf);
        DayOfWeek dow = date.getDayOfWeek();
        System.out.println(dow);

        // String value
        String strDay = dow.getDisplayName(TextStyle.FULL, Locale.ENGLISH);
        System.out.println(strDay);
        strDay = dow.getDisplayName(TextStyle.SHORT, Locale.ENGLISH);
        System.out.println(strDay);

        // Alternatively
        strDay = date.format(DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH));
        System.out.println(strDay);
        strDay = date.format(DateTimeFormatter.ofPattern("EEE", Locale.ENGLISH));
        System.out.println(strDay);
    }
}

输出:

WEDNESDAY
Wednesday
Wed
Wednesday
Wed

在线演示

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


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

#5楼 票数:1

请参阅 DAY_OF_WEEK 字段的 JavaDoc。 它指向 7 个常量 SUNDAY..SATURDAY,显示如何解码 cal.get(Calendary.DAY_OF_WEEK) 的 int 返回值。 你确定吗

Calendar cal = Calendar.getInstance();
cal.set(2011, 02, 28);
cal.get(Calendar.DAY_OF_WEEK);

为您返回错误的值?

#6楼 票数:1

尝试以下操作:

    Calendar cal=Calendar.getInstance();
    int val = cal.get(Calendar.DAY_OF_WEEK);
    System.out.println(new DateFormatSymbols().getWeekdays()[val]);

或者

    Calendar cal=Calendar.getInstance();
    String dayName = new DateFormatSymbols().getWeekdays()[cal
            .get(Calendar.DAY_OF_WEEK)];
    System.out.println(dayName);

#7楼 票数:1

Calendar cal=Calendar.getInstance();
    cal.set(2011, 2, 28);
     int val = cal.get(Calendar.DAY_OF_WEEK);
     System.out.println(val);

#8楼 票数:0

看看SimpleDateFormat和可能的Locale

#9楼 票数:0

如果您需要月份中的确切日期值,则需要使用 Calendar:DAY_OF_MONTH 它将返回从 1 开始的月份中的确切日期。

//Current date is 07-06-2021 and this will return 7
Calendar cal = Calendar.getInstance();
int val = cal.get(Calendar.DAY_OF_MONTH);
System.out.println("Date in month:"+val);

//If you want the day of the week in text better use the 
//SimpleDateFormat, since Calendar API will return the integer value in 
// the week if we given Calendar.DAY_OF_WEEK
String dayWeekText = new SimpleDateFormat("EEEE").format(cal.getTime());
System.out.println("Day of week:"+dayWeekText);

正如评论中所建议的,Java Date API 具有所有这些功能。 Java 8 为日期和时间引入了新的 API,以解决旧的 java.util.Date 和 java.util.Calendar 的缺点。

使用 Java 中的 Date API 也可以实现相同的目的

LocalDate localDate = LocalDate.parse("2021-06-08"); //2021 June 08 Tuesday
System.out.println(localDate.dayOfWeek().getAsText()); //Output as : Tuesday
System.out.println(localDate.dayOfWeek().getAsShortText()); //Output as : Tue
System.out.println(localDate.dayOfMonth().get()); //Output as current date

  ask by riyana translate from so

未解决问题?本站智能推荐:

2回复

给定两个日期范围列表,如何在java中查找非重叠日期

我不确定我的标题是否正确,但这正是我想要实现的目标。 考虑以下两个类,AbsentPeriod,UnavailablePeriod。 特定 找 具有日期的开始日期和结束日期与不存在和不可用期间的日期不重叠; 在给定的StartDate和endDate之间
1回复

java中的日期和时区

我目前正在读取 JSON 格式的日期,如下所示: 在我的应用程序中,我将 JsonFormat 设置如下,以便能够正确读取它: 但是 UTC 不是我想要使用的时区,我应该如何将“UTC”更改为能够在欧洲/巴黎区域读取我的日期时间?
5回复

在 Java 中减少日期

我想从当前时间获取前一天(24 小时)。 例如,如果当前时间是Date currentTime = new Date(); 2011-04-25 12:15:31:562 格林威治标准时间 如何确定时间即 2011-04-24 12:15:31:562 格林威治标准时间
2回复

Java中的日期格式

几个问题: 如何以以下格式立即打印(当前日期/时间)。 如果我知道格式,则如何将字符串日期转换为日期对象,如下所示。 例如:2011-05-04 19:12:46 -0500 格式:YYYY-MM-DD HH:MM:SS [+ |-] hh [mm]
4回复

如何基于Java中的日期获取以前的日期

我有一个表示月份的整数的ArrayList。例如我的列表包含2,8,15(总是按升序排列),所以它将表示任何月份的第2、8和15日。生成一些发票。所以就像如果我在每个月的15日生成发票,那么我需要从某个表中获取数据,其中日期应该在上一个发票日期(根据arraylist为8)和15th之间。任何月
2回复

Java中的日期时间格式

我有以下内容,我找回了时间,但我想增加几个小时。 我不走运。 我尝试过 SimpleDateTime 但似乎无法获得正确的语法。
1回复

Java中的系统日期格式

我写了一个程序来获取系统日期。 我收到了一个错误。 请告诉我如何将系统日期转换为dd-MMM-YY格式。
1回复

查找保存日期时间常量的标准Java辅助类或接口

常量有很多定义,如: 有没有标准类,它们已经拥有这些常量? 最近我在自己的常量定义中发现了bug。 我想完全避免这样的错误...... 更新我还认为标准定义为常量提供了一致的短名称,所以你不应该发明自己的!