- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我面临与 GregorianCalendar 相关的问题。
先决条件: 系统时区是:“亚洲/新加坡” 系统时间为:2014年1月30日
执行代码:
Calendar cal = new GregorianCalendar();
TimeZone tz = TimeZone.getTimeZone("Asia/Singapore");
cal.setTimeZone(tz);
cal.set(Calendar.MONTH, 1);//1 is equivalent to Feb
cal.get(Calendar.YEAR);
cal.set(Calendar.YEAR, 2014);
cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, 5);
Date dte=cal.getTime();
实际结果:2014年3月5日
预期结果:2014 年 2 月 5 日
但是,如果我执行相同的代码并更改顺序,则会产生正确的值:
Calendar cal = new GregorianCalendar();
TimeZone tz = TimeZone.getTimeZone("Asia/Singapore");
cal.setTimeZone(tz);
cal.get(Calendar.DAY_OF_MONTH);
cal.set(Calendar.DAY_OF_MONTH, 5);
cal.set(Calendar.MONTH, 1);//1 is equivalent to Feb
cal.get(Calendar.YEAR);
cal.set(Calendar.YEAR, 2014);
它给出了正确的结果
有人可以帮助我了解这个问题的根本原因吗?
最佳答案
在 1 月 30 日运行代码时,这将是日历的初始状态。 cal.set(Calendar.MONTH, 1);
然后会将日历设置为 2 月 30 日。当调用 cal.get(DAY_OF_MONTH) 时,日历的内部状态将被重新计算以获得正确的日期。因此,由于 cal.isLenient()
为 true,因此 2 月 30 日将转换为 3 月 2 日。然后将日期设置为 30 将得到 3 月 30 日。
尝试在创建日历后添加 cal.setLenient(false)
并查看代码的第一个版本如何失败...
要修复代码,请在日历处于中间状态时删除 get cal.get()
语句,以避免过早重新计算。
编辑:添加了有关cal.get()
的部分
关于java - GregorianCalendar 给出了 "Asia/Singapore"时区的意外结果,系统日期为 2014 年 1 月 30 日,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21881062/
我正在使用 Android TimeZone 功能,我的应用程序正在与期望来自印度设备的 Asia/Kolkata 的服务器进行通信。但是,在获取 TimeZone.getDefault().getD
SimpleDateFormat 的 getTimeZone().getID() 方法返回 Asia/Jerusalem 而不是 Asia/Kolkata 格式为 EEE MMM dd HH:mm:s
根据 https://cloud.google.com/compute/docs/regions-zones/ ,区域/区域“asia-northeast1-a/b/c/”应该假设在日本东京。但是一旦
我正在编写一些需要处理时区的Python(Python 2.7.4(默认,2013年4月6日,19:54:46)[MSC v.1500 32位(Intel)] on win32,Windows 7)代
我想将 jvectormap world_mill map 的中心从欧盟更改为亚洲。有可能的?如果不是,我如何创建以亚洲为中心的自定义世界地图? 最佳答案 经度是用于表示东点或西点相对于格林威治子午线
有谁听说过这个奇怪的软件包,名为:vcredist_x86_2010_sp1.exe,Asia? 我已经从 sqlite.org 获取了 SQLite for DotNet 安装程序,但每次运行它时,
引用:Python pandas convert unix timestamp with timezone into datetime 搜索过这个主题,但仍然找不到答案。 我有一个数据框,格式如下:
我正在使用moments-timezone.js 但我得到了这个异常(exception): moment-timezone.js:476 Moment Timezone has no data fo
将 CURDATE() 和 CURTIME() 更新到列中时,它会更新错误的时间和日期。我想将现有时区更改为 Asia/Kuala_Lumpur 这是我的更新脚本: $sql="UPDATE smss
我在孟买地区创建了新的 Google Cloud 项目,因为这个项目的大部分用户都在印度。这是现有项目的一个端口,我之前一直很高兴地使用 Cloud Firestore 来实现一小部分功能。虽然对我的
我想从字符串中获取准确的时区,例如“Asia/Shanghai”中的 +08:00 最佳答案 使用 LoadLocation功能。 关于go - 我如何从字符串中获取准确的时区信息,例如 +08 :0
我有几个 GCE 实例位于两个区域:asia-southeast1-b和 us-east4-c .所有实例都已经安装了 stackdriver 代理。在指标资源管理器中,我找不到 asia-south
我尝试在日期中使用不同的时区,一切正常,但SE Asia Standard Time 没有解析显示无法解析日期异常的完整日期。 String date="Sun Jan 18 2015 22:11:4
有人可以帮忙解决以下问题吗? 我的操作系统是最新的 windows 10,时区是 (UTC+0300) Istanbul(夏令时已被移除,时区设置为 +0300 在土耳其的最新规定之后 - 2016
我下载并尝试安装 .NET Framework 4.7.2 Targeting Pack。当下载的安装程序运行时,它会由于未知原因产生此错误: 请注意,我在美国并且没有下载亚洲特定的安装程序 (AFA
asia.artifacts.../containers/images 存储桶下的 google 云存储中的 appengine 文件是否可以安全删除而不会造成任何问题。仅仅几年后就已经有 160Gb
我正在尝试使用时区和区域设置转换日期和时间,但是它在 IE11 中不起作用。它适用于 chrome、firefox 和 edge。 最小完整的可验证示例: function getLocalTime(
为什么这段代码会失败?目的是删除时间部分。 String dateStr = "1982-01-01"; String timeZoneID = "Asia/Singapore"; DateForma
我的HDFS-Sink连接: { "name":"hdfs-sink1", "config":{ "connector.class":"io.confluent.connect.hdf
我面临与 GregorianCalendar 相关的问题。 先决条件: 系统时区是:“亚洲/新加坡” 系统时间为:2014年1月30日 执行代码: Calendar cal = new Gregor
我是一名优秀的程序员,十分优秀!