如何更改星期几以匹配递增日期?

时间:2017-12-12 23:37:47

标签: android date increment dayofweek

我有以下代码将日历月增加一个月。

c.add(Calendar.MONTH, 1);
SimpleDateFormat sdf = new SimpleDateFormat("MMM-dd-yyyy");
String oneMonth = sdf.format(c.getTime());

当新日期递增时,我将其显示在textView中。我还想显示与新增加日期协调的星期几。我如何用代码实现这一目标?我尝试在上面的代码下设置这个新代码,但是在这个实例中没有正确设置星期几。

SimpleDateFormat sdf = new SimpleDateFormat("EEEE");
Date d = new Date();
String dayOfTheWeek = sdf.format(d);

有人可以帮助我完成这项工作吗?感谢您的时间和帮助。

UPDATE ::: 解决方案对我有用:

添加" EEEE"像这样的原始简单格式......

            SimpleDateFormat sdf = new SimpleDateFormat("EEEE, MMM-dd-yyyy");
            String oneMonth = sdf.format(c.getTime());

3 个答案:

答案 0 :(得分:1)

TL; DR

    LocalDate date = LocalDate.of(2017, Month.DECEMBER, 13);

    date = date.plusMonths(1);
    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("MMM-dd-yyyy", Locale.ENGLISH);
    String oneMonth = date.format(dateFormatter);
    System.out.println(oneMonth);
    DateTimeFormatter dayOfWeekFormatter = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);
    String dayOfTheWeek = date.format(dayOfWeekFormatter);
    System.out.println(dayOfTheWeek);

打印

Jan-13-2018
Saturday

java.time AKA JSR 310

即使在Android上,也可以考虑使用JSR 310,即现代Java日期和时间API,也称为java.time。与它合作真是太好了。你能在Android上做到吗?当然!获取ThreeTenABP并继续。详细解释的问题链接在本答复的最后。

对于任何阅读并且不编码Android的人来说:现代API内置于Java 8及更高版本。在Java 6和7上,你需要ThreeTen Backport,我在最后提供了一个链接。

您的代码出了什么问题?

我不知道你做错了什么。正如我在评论中所说,您的代码适合我。您说当用户输入另一个日期时,递增的日期会更改。这种行为的一种可能解释是,如果您使用一个Calendar对象(可能从两个变量引用)有两个目的。虽然这样的错误当然可以被追踪并修复,但是你很可能不会首先使用现代API引入它,因为plusMonths()创建了一个 new LocalDate对象,保留原始对象不变(事实上它是不可修改的)。

链接

答案 1 :(得分:0)

如果您有日期类型,请将其传递给此方法,它将返回正确的日期。请注意它如何使用CalendarCalendar.DAY_OF_WEEK来获取您要查找的内容。

public static String getDateDay(Date date){

    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);

    int day = calendar.get(Calendar.DAY_OF_WEEK);

    String dayOfWeek = null;
    switch (day){
        case Calendar.MONDAY:
            dayOfWeek = "Monday";
            break;
        case Calendar.TUESDAY:
            dayOfWeek = "Tuesday";
            break;
        case Calendar.WEDNESDAY:
            dayOfWeek = "Wednesday";
            break;
        case Calendar.THURSDAY:
            dayOfWeek = "Thursday";
            break;
        case Calendar.FRIDAY:
            dayOfWeek = "Friday";
            break;
        case Calendar.SATURDAY:
            dayOfWeek = "Saturday";
            break;
        case Calendar.SUNDAY:
            dayOfWeek = "Sunday";
            break;
    }

    return dayOfWeek;
}

答案 2 :(得分:0)

我弄清楚了我的问题,这很简单,我不相信我错过了它。我只需添加" EEEE"到#34; MM-dd-yyyy"的原始简单日期格式像这样" EEEE,MM-dd-yyyy"输出正确的星期几和日期。很抱歉浪费时间,但我感谢您的时间和信息。我每天都在学习更多。再次感谢那些试图帮助我的人。非常感激!