【问题标题】:How to change the day of week to match an incremented date?如何更改星期几以匹配递增的日期?
【发布时间】:2018-05-26 18:27:33
【问题描述】:

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

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

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

更新::: 适合我的解决方案:

像这样将“EEEE”添加到原始的简单日期格式中......

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

【问题讨论】:

  • 你得到什么结果而不是正确的结果?你的代码在我看来是正确的。
  • 您的代码对我有用。两个潜在的问题:(1)您是否记得将Calendar 的日期以与前者相同的方式传递到后者的格式化程序中? (2) 您应该将Locale 传递给格式化程序,以便它知道您想要哪种语言。
  • 即使在 Android 上,也可以考虑使用 JSR 310,即现代 Java 日期和时间 API,也称为 java.time,通过 API 的 Android 反向端口 ThreeTenABP。与它一起工作要好得多。 yourLocalDate.plusMonths(1).format(DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH))。如果 yourLocalDate 是 2017 年 12 月 13 日,则这会产生 Saturday,因为 2018 年 1 月 13 日是星期六。
  • 奥莱,谢谢。它确实有一个例外,我想我忘了解释。新的递增日期将随着用户输入另一个日期而改变。当我使用上面的解决方案时,它确实改变了星期几,但它匹配新用户输入的日期,而不是新的递增日期。我需要它根据新的用户输入日期如何更改日期来匹配新的递增日期。有什么想法吗?
  • Ole,我会试试你上面提到的本地日期格式,让你知道它是否适合我。再次感谢。

标签: android date increment dayofweek


【解决方案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 又名 JSR 310

即使在 Android 上,也可以考虑使用 JSR 310,即现代 Java 日期和时间 API,也称为 java.time。与它一起工作要好得多。你能在安卓上做到这一点吗?当然!获取 ThreeTenABP 并继续前进。详细解释问题的链接在此答案的末尾。

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

你的代码出了什么问题?

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

链接

【讨论】:

  • 再次感谢奥莱。我正在调查这个。也想清楚我的问题。我有一个填充当前日期的文本字段,包括星期几。如果用户不想要当前日期,他们可以触摸文本字段,然后他们可以从日期选择器中选择一个新日期。当他们这样做时,它会用新的选定日期和一周中新的相应日期重新填充该文本字段。该字段的值会自动更改另一个字段,该字段具有以一、三个月或六个月递增的附加日期。日期本身会发生变化,但其他字段中的星期几不会发生变化。
  • 其他字段中的星期几不变。它只是自动从另一个文本字段输入一周中的同一天,但我需要它根据用户更改进行更改,以与自动更改的附加文本字段中的日期相对应。我希望这是有道理的。
  • Ole,我发现了我的问题,它是如此简单,以至于我不相信我错过了它。我只需要将“EEEE”添加到“MM-dd-yyyy”的原始简单日期格式中,就像“EEEE,MM-dd-yyyy”一样,它会输出正确的星期几和日期。很抱歉浪费了时间,但我感谢您的时间和信息。我每天都在学习更多。再次感谢!
【解决方案2】:

如果您有 Date 类型,请将其传递给此方法,它将返回正确的日期。请注意它如何使用 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;
}

【讨论】:

  • 谢谢,我试试这个。
  • 对不起,我不鼓励使用这个答案。无论您想要现代的DateTimeFormatter 还是Android 设备上已经内置的旧的SimpleDateFormat,使用问题中的标准日期格式化程序既安全又容易。
【解决方案3】:

我发现了我的问题,它是如此简单,以至于我不相信我错过了它。我只需要将“EEEE”添加到“MM-dd-yyyy”的原始简单日期格式中,就像“EEEE,MM-dd-yyyy”一样,它会输出正确的星期几和日期。很抱歉浪费了时间,但我感谢您的时间和信息。我每天都在学习更多。再次感谢那些试图帮助我的人。非常感激!

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2011-08-22
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2019-06-24
    • 2019-05-18
    相关资源
    最近更新 更多