【问题标题】:Android Calendar: first and last day of week -> zero monthAndroid日历:一周的第一天和最后一天->零月
【发布时间】:2014-01-26 22:56:24
【问题描述】:

我想获取本周第一个星期一和本周第一个星期五的日期。

我是这样尝试的:

    Calendar calendarFirstDay = Calendar.getInstance(Locale.GERMANY);
    Calendar calendarLastDay = Calendar.getInstance(Locale.GERMANY);
    Date now = new Date();

    calendarFirstDay.setTime(now);
    calendarLastDay.setTime(now);
    calendarFirstDay.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    calendarLastDay.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);

    MyTextView.setText(calendarFirstDay.get(Calendar.DATE) + "." + calendarFirstDay.get(Calendar.MONTH) + "." + calendarFirstDay.get(Calendar.YEAR) + " - "  + calendarLastDay.get(Calendar.DATE) + "." + calendarLastDay.get(Calendar.MONTH) + "." + calendarLastDay.get(Calendar.YEAR));

如果我今天(2014 年 1 月 26 日,星期日)尝试这个脚本,输出如下:

20.0.2014 - 24.0.2014

正确的是 20.1.2014 - 24.1.2014

有人知道为什么我的月份是零吗?

【问题讨论】:

    标签: java android


    【解决方案1】:

    From the JavaDocs:

    getset 的字段编号表示月份。这是特定于日历的值。公历和儒略历中的第一个月是JANUARY,即0;最后一个取决于一年中的月数。

    因此第一个月(一月)的MONTH 值为0,而不是1(如您所料)。

    不过有一个更好的解决方案:使用DateFormatSimpleDateFormat 将日期格式化为文本。这样一来,您就不必担心,让DateFormat 来处理它。例如:

    DateFormat myFormat = new SimpleDateFormat("dd.MM.yyyy");
    MyTextView.setText(
        myFormat.format(calendarFirstDay.getTime()) + " - " +
        myFormat.format(calendarLastDay.getTime())
    );
    

    【讨论】:

    • 非常感谢您的精彩解释!这对我帮助很大! :)
    • 但我认为,日历没有 getDate() 方法。我认为,getTime() 会很好。
    • @Pengxer 哎呀,这确实是一个错字。令人困惑的方法名称令人困惑。 :-P
    【解决方案2】:

    如中所述

    http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#set(int,%20int,%20int)

    如果你使用这种方法,一月是 0,十二月是 11,所以你应该给你的月份加 1。

    编辑:您正在使用 get 方法,但它也可能是基于 0 的。

    【讨论】:

      猜你喜欢
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2021-07-21
      • 1970-01-01
      • 2013-11-22
      相关资源
      最近更新 更多