GVKun编程网logo

了解java.util.Calendar WEEK_OF_YEAR(了解女性健康)

30

如果您对了解java.util.CalendarWEEK_OF_YEAR感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于了解java.util.CalendarWEEK_OF

如果您对了解java.util.Calendar WEEK_OF_YEAR感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于了解java.util.Calendar WEEK_OF_YEAR的详细内容,我们还将为您解答了解女性健康的相关问题,并且为您提供关于 正确获取星期几(Calendar.DAY_OF_WEEK)、2月来自java.util.Calendar的奇怪行为、android calendar DAY_OF_WEEK_IN_MONTH、Android java.util.Calendar-时差的有价值信息。

本文目录一览:

了解java.util.Calendar WEEK_OF_YEAR(了解女性健康)

了解java.util.Calendar WEEK_OF_YEAR(了解女性健康)

我试图了解其java.util.Calendar.get(java.util.Calendar.WEEK_OF_YEAR)工作原理,但似乎缺少一些要点。

String time = "1998-12-31"; // year month dayjava.util.Calendar date = java.util.Calendar.getInstance();date.setTime((new java.text.SimpleDateFormat("yyyy-MM-dd")).parse(time));System.err.println("Week of year = " + date.get(java.util.Calendar.WEEK_OF_YEAR));// Week of year = 1 Why ???

为什么date.get(java.util.Calendar.WEEK_OF_YEAR)在一年的最后一周返回1?

而且,WEEK_OF_YEAR因为"1998-01-01"是1,因为"1998-12-23"它是52。
有人对此行为有解释吗?

答案1

小编典典

从java.util.Calendar javadoc:

第一周
日历使用两个参数定义了特定于语言环境的一周工作日:一周的第一天和第一周的最少天数(从1到7)。这些数字是在构造Calendar时从语言环境资源数据中获取的。也可以通过设置其值的方法明确指定它们。

在设置或获取WEEK_OF_MONTH或WEEK_OF_YEAR字段时,日历必须确定月份或年份的第一周作为参考点。每月或每年的第一周定义为最早的7天时间段,从getFirstDayOfWeek()开始,并且至少包含该月或一年中的getMinimalDaysInFirstWeek()天。在第一周之前编号为…,-1、0的周;编号为2、3,…的星期。请注意,get()返回的归一化编号可能不同。例如,特定的Calendar子类可以将一年的第1周之前的一周指定为上一年的n周。

因此,它是特定于语言环境的。在您的情况下,如果该周包含新年的日子,则将其计为新年的第1周。

您可以使用Calendar#setMinimalDaysInFirstWeek(int)更改此行为。

 正确获取星期几(Calendar.DAY_OF_WEEK)

正确获取星期几(Calendar.DAY_OF_WEEK)

 正确获取星期几(Calendar.DAY_OF_WEEK)

Java代码 

 收藏代码

  1. Calendar now = Calendar.getInstance();  
  2. //一周第一天是否为星期天  
  3. boolean isFirstSunday = (now.getFirstDayOfWeek() == Calendar.SUNDAY);  
  4. //获取周几  
  5. int weekDay = now.get(Calendar.DAY_OF_WEEK);  
  6. //若一周第一天为星期天,则-1  
  7. if(isFirstSunday){  
  8.     weekDay = weekDay - 1;  
  9.     if(weekDay == 0){  
  10.         weekDay = 7;  
  11.     }  
  12. }  
  13. //打印周几  
  14. System.out.println(weekDay);  
  15.   
  16. //若当天为2014年10月13日(星期一),则打印输出:1  
  17. //若当天为2014年10月17日(星期五),则打印输出:5  
  18. //若当天为2014年10月19日(星期日),则打印输出:7  

 

 

星期日为一周的第一天 SUN MON TUE WED THU FRI SAT
DAY_OF_WEEK返回值 1 2 3 4 5 6 7
星期一为一周的第一天 MON TUE WED THU FRI SAT SUN
DAY_OF_WEEK返回值 1 2 3 4 5 6 7

 

以下参考:

1. 在获取月份时,Calendar.MONTH + 1 的原因
Java中的月份遵循了罗马历中的规则:当时一年中的月份数量是不固定的,第一个月是JANUARY。而Java中Calendar.MONTH返回的数值其实是当前月距离第一个月有多少个月份的数值,JANUARY在Java中返回“0”,所以我们需要+1。

2. 在获取星期几 Calendar.DAY_OF_WEEK – 1 的原因
Java中Calendar.DAY_OF_WEEK其实表示:一周中的第几天,所以他会受到 第一天是星期几 的影响。
有些地区以星期日作为一周的第一天,而有些地区以星期一作为一周的第一天,这2种情况是需要区分的。
看下表的返回值

星期日为一周的第一天 SUN MON TUE WED THU FRI SAT
DAY_OF_WEEK返回值 1 2 3 4 5 6 7
星期一为一周的第一天 MON TUE WED THU FRI SAT SUN
DAY_OF_WEEK返回值 1 2 3 4 5 6 7

所以Calendar.DAY_OF_WEEK需要根据本地化设置的不同而确定是否需要 “-1”
Java中设置不同地区的输出可以使用 Locale.setDefault(Locale.地区名) 来实现。

 

System.out.println(calendar.get(Calendar.DAY_OF_WEEK));

返回的是周几,而不是一周的第几天

 

可以这样设置,星期第一天是星期几:

calendar.setFirstDayOfWeek(Calendar.MONDAY);

也可以设置Calendar.SUNDAY

设置好了就决定了当前日期的WEEK_OF_YEAR,但并不会改变DAY_OF_WEEK !

 

3. 获取日期时 Calendar.DAY_OF_MONTH 不需要特殊的操作,他直接返回一个月中的第几天

2月来自java.util.Calendar的奇怪行为

2月来自java.util.Calendar的奇怪行为

我遇到了来自java.util.Calendar的奇怪行为:

import static org.junit.Assert.*;import org.junit.Test;import java.util.Calendar;public class Tester1 {    @Test    public void test_monthOfDate() {        assertEquals(1, monthOfDate(2013, 1, 30)); // OK        assertEquals(1, monthOfDate(2013, 1, 31)); // OK        // Start of February        assertEquals(2, monthOfDate(2013, 2, 1));  // FAIL        assertEquals(2, monthOfDate(2013, 2, 28)); // FAIL        // to the end of it        // and after that it is okay also        assertEquals(3, monthOfDate(2013, 3, 1));  // OK    }    public int monthOfDate(int year, int month, int day) {        Calendar cal = Calendar.getInstance();        cal.set(Calendar.YEAR, year);        cal.set(Calendar.MONTH, month - 1);        // just a simple get! but seems it is very important        cal.get(Calendar.MONTH);        //        cal.set(Calendar.DAY_OF_MONTH, day);        return cal.get(Calendar.MONTH) + 1;    }}

我想知道为什么会这样吗?

答案1

小编典典

问题是您要从2013年1月30日开始使用日历。

然后,您将年份设置为2013年-这不是问题。

然后,您将月份设置为1(即2月)。您希望在这里发生什么?实际发生的情况是,它会记住需要将月份设置为1,而 不是
重新计算实际时间值。根据文档(Emphsis我的),

在您调用to时重新计算时间值:get

set(f,value)将日历字段f更改为value。另外,它设置一个内部成员变量以指示日历字段f已更改。尽管日历字段f立即更改,但是直到下一次调用get(),getTime(),getTimeInMillis(),add()或roll()时,才重新计算日历的时间值(以毫秒为单位)。因此,对set()的多次调用不会触发多个不必要的计算。作为使用set()更改日历字段的结果,其他日历字段也可能会更改,具体取决于日历字段,日历字段值和日历系统。
此外,在重新计算日历字段之后,get(f)不一定会返回通过调用set方法设置的值。 具体情况由具体的日历类确定。

当您尝试将“ 1月30日”更改为“ 2月30日”并强制进行计算时, 实际 发生的情况是您将在3月2日结束我的工作,但是在实现上可能会有所不同。

最好的解决方法是:

  • 使用Calendar.set(year, month, date)代替来避免此订购问题
  • 首先,将Joda Time用作更明智的API。

android calendar DAY_OF_WEEK_IN_MONTH

android calendar DAY_OF_WEEK_IN_MONTH

http://zhidao.baidu.com/question/88636220.html

也就是

day 所在的周是这个月的第几周
明白了  真是被这个命名弄混了

Android java.util.Calendar-时差

Android java.util.Calendar-时差

我想制作日历视图以支持触摸交互.
因此,我想构建新的自定义日历视图.
我试图使视图偏移量和实际日期值之间的映射功能.

这是我的主意:
如果我可以计算出自基准日期以来的周数(以我的情况为1989-12-31),
很容易知道偏移量. HEIGHT_FOR_WEEK * NUM_OF_WEEK是非常简单的计算
知道确切的偏移量.

我的问题是这样的:
首先,我从基准日期获得了毫秒值.我将毫秒设置为
另一个日历对象.我希望与该对象有相同的日期.但实际上
是不同的日期.

mBaseDateInMillis = mBaseDate.getTimeInMillis();
mAnotherDate.setTimeInMillis(mBaseDateInMillis);
/* I expect mBaseDate == mAnotherDate.
 * but it was different.
 */ 

这是我的代码:

public class CalendarCoordinate {
    public static final long ONEWEEK_IN_MILLISECONDS = 60 * 60 * 24 * 7 * 1000;
    public Calendar mBaseDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
    public long mBaseDateInMillis = 0;
    public Calendar mDate = new GregorianCalendar(TimeZone.getTimeZone("GMT"));
    public int  mWeekHeight = 30;

    /**
     * CTOR
     */
    public CalendarCoordinate() {
        /* Base date is 1989-12-31 0, 0, 0
         * It was Sunday and offset 0 will be mapped onto this day.
         */
        mBaseDate.set(Calendar.MILLISECOND, 0);
        mBaseDate.set(1989, 12, 31, 0, 0, 0);
        mBaseDateInMillis = mBaseDate.getTimeInMillis();
        Log.v(TAG, "BaseDate:" + mBaseDate.toString());
    }

    /**
     * Compute DATE from Y-Offset
     * @param yOffset
     * @return
     */
     public Calendar dateFromYOffset(int yOffset) {
        long nthWeeks = yOffset / mWeekHeight;
        long millsSinceBaseDate = nthWeeks * ONEWEEK_IN_MILLISECONDS;
        mDate.clear();
        mDate.set(Calendar.MILLISECOND, 0);
        mDate.setTimeInMillis(mBaseDateInMillis + millsSinceBaseDate);

        /* We SHOULD call to update mDate internal data structure. 
         * Java is really strange for this thing
         **/
        mDate.getTimeInMillis();
        return mDate;
    }

    /**
     * Compute Y-Offset from DATE
     * @param date
     * @return
     */
    public long yOffsetFromDate(Calendar cal) {
        long mills = cal.getTimeInMillis();
        long nthWeeks = (mills - mBaseDateInMillis)/ONEWEEK_IN_MILLISECONDS;
        return nthWeeks * mWeekHeight;
    }
}

有人可以帮助我吗?我不是一个好的Java程序员.

解决方法:

这句话使我感到困惑:

/* I expect mBaseDate == mAnotherDate.
 * but it was different.
 */

您是否真的想通过比较来检查是否相等:
    如果(mBaseDate == mAnotherDate){System.out.println(“它们是相同的”); }

如果是这样,您的问题是您误解了“ ==”运算符在Java中的工作方式.它比较引用,而不是比较基础对象数据,并且由于这些对象是不同的对象(具有相同的值),因此始终为假.有关更多详细信息,请参见Java Notes on comparison operators.

另外,这些行对我来说真的很可疑:

/* We SHOULD call to update mDate internal data structure. 
* Java is really strange for this thing
**/
mDate.getTimeInMillis();

如果Android出现需要您执行此操作的错误,我会感到非常惊讶,但是我想一切皆有可能.没有这个电话,您会遇到什么问题?

今天关于了解java.util.Calendar WEEK_OF_YEAR了解女性健康的分享就到这里,希望大家有所收获,若想了解更多关于 正确获取星期几(Calendar.DAY_OF_WEEK)、2月来自java.util.Calendar的奇怪行为、android calendar DAY_OF_WEEK_IN_MONTH、Android java.util.Calendar-时差等相关知识,可以在本站进行查询。

本文标签: