有人请解释 Calendar.get(cal.DAY_OF_WEEK) 如何给出正确的输出,而 cal.DAY_OF_WEEK 是默认且未修改的? [复制]

2024-05-07

我想知道约会的日子。当我在 cal.set(year,month-1,day) 中设置日期时,设置日历字段YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。其他字段的先前值将被保留。因此,当我执行 cal.DAY_OF_WEEK 时,我将获得已经存在的值。 但是 cal.get(cal.DAY_OF_WEEK) 如何给出正确的值呢? (如java文档中所述,public int get(int field)返回给定日历字段的值。)我不明白如何在此函数中传递整数值(作为日历)字段也未修改) 给出了正确的输出。

public static String findDay() {
 Calendar cal = Calendar.getInstance();
 cal.set(2019,1,15);
 System.out.println(cal.toString());
 System.out.println(cal.DAY_OF_WEEK); //7 which is unchanged by cal.set
 System.out.println(cal.get(cal.DAY_OF_WEEK)); //6
 return "";

}

代码输出:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Etc/UTC",offset=0,dstSavings=0,useDaylight=false,transi
tions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=1,WEEK_OF_YEAR=7,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=46,DAY_OF_WEEK=6,DAY_OF_WEEK_IN
_MONTH=3,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=38,SECOND=14,MILLISECOND=374,ZONE_OFFSET=0,DST_OFFSET=0]    
7
6

让我们来剖析一下这些:

This:

System.out.println(cal.toString());

打印出toString()对于您的 Calendar 对象,其字段的状态,并返回:

java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Etc/UTC",offset=0,dstSavings=0,useDaylight=假,转运 tions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2019,MONTH=1,WEEK_OF_YEAR=7,WEEK_OF_MONTH=3,DAY_OF_MONTH=15,DAY_OF_YEAR=46,DAY_OF_WEEK=6,DAY_OF_WEEK_IN _MONTH=3,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=38,SECOND=14,MILLISECOND=374,ZONE_OFFSET=0,DST_OFFSET=0]

是的,这里 DAY_OF_WEEK 是 6

虽然这样:

System.out.println(cal.DAY_OF_WEEK); //7 which is unchanged by cal.set

返回Calendar.DAY_OF_WEEK字段结果,它是一个常量并且 == 到 7。

最后这个:

System.out.println(cal.get(cal.DAY_OF_WEEK)); //6

返回 6,这是 Calendar 对象保存的 DAY_OF_WEEK 字段。

将您的 Calendar 对象(简化)想象成如下所示:

public abstract class Calendar {
    public static int DAY_OF_WEEK = 7;  // a constant that never changes

    // ..... many more fields

    // field name may be different
    private int dayOfWeek = 0; // or some other default value

    public void set(...) {
        // sets the dayOfWeek value
    }

    public int get(int ) {
        if (field == DAY_OF_WEEK) {
            return this.dayOfWeek;
        }

        // .... more code

    }

    public String toString() {
        return .... + "DAY_OF_WEEK:" + dayOfWeek + .....;
    }
}

现在有意义吗?您正在设置一个隐藏的 dayOfWeek 字段并获取其结果

So this:

System.out.println(cal.get(cal.DAY_OF_WEEK));

实际上返回的是dayOfWeek私有字段结果

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有人请解释 Calendar.get(cal.DAY_OF_WEEK) 如何给出正确的输出,而 cal.DAY_OF_WEEK 是默认且未修改的? [复制] 的相关文章

随机推荐

  • Codeigniter-如何在删除index.php后加载新页面

    我是 codeIgniter 的新手 我的索引文件中有一些链接 我已经从 url 中删除了 index php 所以现在 url 看起来像 http localhost app Loader demo page http localhost
  • 在 MySQL 中选择不同的对

    我想选择 A 列和 B 列中具有相同值的行 例如 如果我的表是 A B 1 2 3 4 1 2 4 5 输出应该是 A B 1 2 A SELECT DISTINCT A B FROM table 选择表中的所有值 B SELECT DIS
  • 使用 pandas to_datetime 时如何定义格式?

    我想根据以下内容绘制结果与时间的关系图testresult csv文件具有以下格式 并且我无法正确定义 TIME 列的数据类型 TIME RESULT 03 24 2016 12 27 11 AM 2 03 24 2016 12 28 41
  • Android Google Cast 通知禁用

    我将 Google Cast 集成到了我的 Android 应用程序中 我的所有内容都是通过带有通知的服务播放的 当我使用 Google Cast 播放媒体时 它会添加自己的通知 是否可以禁用默认的谷歌强制转换通知并仅使用自己的通知 谢谢
  • Firefox 和 IE 在 元素上添加了内边距/边距。和clearfix的奇怪之处

    在很长一段时间里 我在 Firefox 和 IE 中遇到了一些垂直间距问题 我正在使用一个 我的 css 中的选择器将边距应用于某个容器元素内的所有内容 在 Chrome 中工作正常 但是在 FF 和 IE 中 我似乎不知从何而来得到了神秘
  • 在数据库设计中什么时候需要使用一对一关系?

    在数据库设计中什么时候需要使用一对一关系 在我看来 如果两个表是一对一的关系 那么它们可以合并成一个表 这是真的 对大型表进行垂直分区以减少 I O 和缓存需求 将经常查询的列与很少查询的列分开 向生产系统添加列时alter table就是
  • PHP DOM 获取选定的

    假设 HTML 看起来像这样
  • 在 jQuery 中删除或更改 CSS 伪类

    一个足够简单的问题 如此简单 是否可以使用 jQuery 删除或更改 CSS 伪类 或者任何其他与此相关的 Javascript 方法 具体来说 我想摆脱 专注于输入 我无法以任何方式直接更改 CSS 文件 谢谢你的帮助 Buster 我无
  • 干净地销毁System V共享内存段

    我在用shmget shmat and shmctl分别获取和创建共享内存段 将其附加到进程地址空间中并删除它 我想知道进程是否仍然可以使用共享内存段 即使它已被分离并要求使用删除 shmctl id IPC RMID 在一个过程中 我无法
  • 如何从具体类转换为接口类型?

    我正在构建一个多层应用程序 当我将对象从表示层传递到业 务层时 我想将其转换为接口类型 因为业务层不知道表示层的具体类 public ActionResult SubmitSurvey SurveyAnswer answers ISurve
  • 通过 POST 将 JSON 编码的变量从 PHP 传递到 Javascript

    我有一个多维数组 我想将其发送到带有 Javascript 的 PHP 脚本 该脚本解析 JSON 数据并将其绘制在 Google 地图上 我正在尝试使用表单来模拟它
  • 使用 Rails/ActiveRecord 覆盖旧数据库中列的名称或别名

    我正在针对旧数据库编写 Rails 应用程序 此旧数据库中的一个表有一个名为object id 很遗憾object id也是 Ruby 中每个对象的属性 因此当 ActiveRecord 尝试使用这些对象来制定查询时 它使用 Ruby 定义
  • 如何有效地计算 Perl 中覆盖给定范围的范围?

    我有一个大约 30k 范围的数据库 每个范围都作为一对起点和终点给出 12 80 34 60 34 9000 76 743 我想编写一个 Perl 子例程来表示一个范围 不是来自数据库 并返回数据库中完全 包含 给定范围的范围数 例如 如果
  • WCF 数据契约/序列化

    我创建了一个简单的 WCF 应用程序 它公开一个操作 此操作采用复合数据类型作为参数 我没有用 DataContract 属性修饰这个复合数据类型 但这是有效的 我可以在 WSDL 中看到它的架构 现在我的理解是 这个新的自定义类型应该用
  • 更新插入不适用于 updateOnebulkWrite v3.4

    我正在尝试批量写入一些更新 除了更新插入之外的所有内容都正常 我的代码完美地更新了所有项目 并且没有给出任何错误 这里的问题是批量插入updateOne没有更新插入 这是我的代码的未经测试和缩短的示例 因此您可能会发现一些语法错误 希望您明
  • 使用 GenericRecord 在 Avro 中填充嵌套记录的问题

    假设我有以下架构 name Profile type record fields name firstName type string name address type type record name AddressUSRecord f
  • 将数据从 Excel 导出到 Outlook

    我已经用 Excel 起草了一封电子邮件 其中填充了数据表中的信息 单元格 A1 到 A4 包含 嗨 希望你做得好 和消息 等等 A5到H10有一个包含信息的表格 A11到A30有类似 期待您的回复 的电子邮件内容 我只想复制 A1 A4
  • 在 Firebase 群组消息应用中实现已读回执功能

    我想在我的 Firebase 群组消息应用中实现 Seen 功能 您能否建议采取最好 最有效的方法 工作代码将不胜感激 例如 应用程序会显示 已被 6 人看过 or 15 人看过 在群组消息中 这是我的项目 https github com
  • Cesium - 为什么 scene.pickPositionSupported 为 false

    我最终试图在我的房子顶部画一个多边形 我能做到 问题是 在缩小 放大和旋转 或相机移动 时 多边形不会粘在我房子的顶部 我得到了很大的帮助这个答案 https stackoverflow com a 35992537 1735836 所以
  • 有人请解释 Calendar.get(cal.DAY_OF_WEEK) 如何给出正确的输出,而 cal.DAY_OF_WEEK 是默认且未修改的? [复制]

    这个问题在这里已经有答案了 我想知道约会的日子 当我在 cal set year month 1 day 中设置日期时 设置日历字段YEAR MONTH DAY OF MONTH HOUR OF DAY 和 MINUTE 的值 其他字段的先