【问题标题】:java Date object- how to increment day of week [duplicate]java Date对象-如何增加星期几[重复]
【发布时间】:2015-08-08 06:49:03
【问题描述】:

我目前正在尝试在用户选择的某一天安排每周执行一次的方法。我知道我可以通过以下方式获取当前日期:

Date date = new Date();

在设置我的 TimerTask 以执行时,我需要根据用户选择的星期几将日期增加 1-6 天。我在文档中没有看到 setDay() 方法,我想知道解析一天、更改它并添加回日期对象是否是唯一的方法。似乎会有更简单的东西。

【问题讨论】:

标签: java date


【解决方案1】:

您需要使用日历。

java.util.Calendar 类是 Date 对象的抽象封装。

Calendar 为日期字段提供 getter 和 setter。


更新为根据要求增加星期几的示例:
        Date date = new Date();
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        calendar.set(Calendar.DAY_OF_WEEK,(calendar.get(Calendar.DAY_OF_WEEK)+1));
        //alternative:
        //calendar.add(Calendar.DAY_OF_WEEK, 1); 
        Date newDate = calendar.getTime();


更新:注意使用 java.time 的 java 8+ 实现

日历和日期尚未被弃用,您仍然可以混合搭配。

但是,如果您想正确处理时区或想要进行更多本地化(什么时候不这样做?),那么您最好使用 java.time。

【讨论】:

  • 您能发布一个从日历对象中获取日期并增加星期几的示例吗?需要以日期对象的形式结束,以便我可以使用 timer.schedule(... , ....)
  • 我用增加星期几的例子更新了答案。
  • 当使用 calendar.set(Calendar.DAY_OF_WEEK, 2) 时,它将日历日期设置为前一个星期一,而我需要它始终是下一周。有什么想法吗?
  • 首先,请使用常量,即calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY)。将一周中的某一天测试到某个范围(calendar.get(Calendar.DAY_OF_WEEK)>=Calendar.MONDAY)会更容易,这是使用 API 的正确方法。接下来请详细说明您的问题以及您使用的日期和您期望的结果。
  • 仅供参考,非常麻烦的日期时间类,例如 java.util.Datejava.util.Calendarjava.text.SimpleDateFormat 现在是 legacy,被 Java 8 及更高版本中内置的 java.time 类所取代.见Tutorial by Oracle
【解决方案2】:

您可能正在寻找Date.setDate()

请记住,它已被弃用,文档建议使用 Calendar.set(Calendar.DAY_OF_MONTH, int date)

【讨论】:

    【解决方案3】:
    public static Date addDays(Date date, int days) {
        GregorianCalendar calendar = getCalendar(date);
        calendar.add(Calendar.DATE, days);
        return calendar.getTime();
    }
    

    这应该可以解决问题。

    【讨论】:

    • getCalendar 未定义。
    • 另外,应该是calendar.add(Calendar.DAY_OF_WEEK, 1);,而不是calendar.add(Calendar.DATE, 1);,不要保留周末。
    【解决方案4】:

    使用Calendar 课程会很容易。

        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DATE, 1); // this will add number of days to current
                                    // date
        Date date = cal.getTime(); // it will return the date object
        System.out.println(date);
    

    【讨论】:

      【解决方案5】:

      您可能想使用Calendar

      使用Calendar 对象,您可以简单地使用Calendar.add(Calendar.DAY_OF_WEEK, 1); 添加一天

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-23
        • 1970-01-01
        • 2018-05-06
        • 2011-04-14
        • 2014-05-23
        • 1970-01-01
        • 1970-01-01
        • 2016-11-16
        相关资源
        最近更新 更多