繁体   English   中英

在 Java 中查找日期的日期

Finding day of a date in Java

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

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

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

9 个回复

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

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

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

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

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

Output

Wed

也可以看看

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

java.time

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

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

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

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

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

Output:

WEDNESDAY
Wednesday
Wed
Wednesday
Wed

在线演示

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


* For any reason, if you have to stick to Java 6 or Java 7, you can use ThreeTen-Backport which backports most of the java.time functionality to Java 6 & 7. If you are working for an Android project and your Android API级别仍然不符合 Java-8,检查Java 8+ API 可通过脱糖如何在 Android 项目中使用 ThreeTenABP

请参阅 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);

为您返回错误的值?

尝试以下操作:

    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);
Calendar cal=Calendar.getInstance();
    cal.set(2011, 2, 28);
     int val = cal.get(Calendar.DAY_OF_WEEK);
     System.out.println(val);

查看SimpleDateFormat和适当的Locale

如果您需要月份中的确切日期值,则需要使用 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 日期 API 具有所有这些功能。 Java 8 引入了新的日期和时间 API,以解决旧版 java.util.Date 和 java.util.Calendar 的缺点

使用 Java 中的日期 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
1 在Java中查找日期格式

我们如何在Java中获取日期格式? 我有一个日期格式的列。 我想找到每一行的格式。 我怎样才能做到这一点 ? 前- ...

2011-11-11 08:45:51 4 2633   java
3 在java中查找当前日期和后天的日期

如何在java中查找当前日期。 我发现了很多,但每次我得到相同的命令 Date d = new Date(); 或类似的东西每个这样的命令都会返回 1970 年的日期。 我不明白,获得 1970 年的日期有什么好处? 有什么方法可以让我获得当前时间并在其中添加一秒钟。 我的真正目的是将一个 long ...

2017-04-14 06:46:05 2 1268   java/ date
8 从日期列表中查找日期

在数据表中捕获日期。 例如,如果日期列包含 20 个日期值,则 19 个日期值相同,只有一个日期不同。 我怎样才能捕捉到不同的日期?var directories = Directory.GetDirectories(directory); foreach (string subdirectory ...

2019-11-08 11:09:05 0 42   c#
9 在Javascript中根据日期查找日期

这里唯一新的是使用eval() : 我们需要带有引号的日期,但是,如它出现在框中,它没有任何。 所以我们添加引号。 但这只是一个字符串,我们想要一个Date对象。 所以我们使用eval()来进行更改。 它没有给出正确的答案 ...

10 在 sql 中查找日期

我需要一个查询来根据年、月、星期几和工作日编号查找日期。 例如,如果问题是查找 2010 年 1 月的第 2 个星期日的日期,则答案应该是“2010-01-10”。 输入是 Dyno 表示 dayno ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM