java - CodenameOne - 修复日历 get(Calendar.DAY_OF_WEEK) 比预期更大的值
问题描述
我正在创建一种解决方法来修复我的应用程序中 CN1 的 SimpleDateFormat“克隆”类。
我不能使用纯 Java 中的其他类。
我在我的 CN1 应用程序中使用了这个指令
int dayNumber=c.get(Calendar.DAY_OF_WEEK);
用于处理格式字符串中的 u 字母。
在创建这篇文章时,星期三 dayNumber 的值恰好是 4。
所以我用
int dayNumber=c.get(Calendar.DAY_OF_WEEK)-1;
因为我在 Oracle 文档中找到
Day number of week (1 = Monday, ..., 7 = Sunday)
我想知道它是否正确,以便我涵盖一周中的 7 天,所以它就像
(1 = Monday, ..., 7 = Sunday)
我可以为 Java 和 Android 的兼容性设置正确的 u 值。
解决方案
我了解现代 Java 日期和时间 API java.time 还不是 CodeName One 的一部分,因此您不能在您的情况下使用它。除了像您这样的特殊情况外,没有人应该使用Calendar
它,因为它设计不佳且早已过时。每个人都应该使用 java.time。
要从(Calendar
默认情况下从 java.time 获得的数字)获取 (1 = Monday, ..., 7 = Sunday):
int dayNumber = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7 + 1;
在模 7 下看到,我首先加 5,然后加 1,所以总共 6,这与减 1 相同。我正在使用这个技巧来确保我在 1 到 7 区间内得到一个数字(我们没有总是简单地从Calendar
) 的返回值中减去 1。
我正在演示边缘案例并使用 java.time :
LocalDate ld = LocalDate.of(2021, Month.SEPTEMBER, 5);
ZonedDateTime startOfDay = ld.atStartOfDay(ZoneId.of("Etc/UTC"));
Calendar c = GregorianCalendar.from(startOfDay);
int dayNumber = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7 + 1;
System.out.format("%s: %s = %d%n", ld, ld.getDayOfWeek(), dayNumber);
ld = ld.plusDays(1);
startOfDay = ld.atStartOfDay(ZoneId.of("Etc/UTC"));
c = GregorianCalendar.from(startOfDay);
dayNumber = (c.get(Calendar.DAY_OF_WEEK) + 5) % 7 + 1;
System.out.format("%s: %s = %d%n", ld, ld.getDayOfWeek(), dayNumber);
输出是:
2021-09-05: SUNDAY = 7 2021-09-06: MONDAY = 1
免责声明:我特别不知道 CodeName One Calendar
。我强烈希望它的行为与原来的完全一样java.util.Calendar
,我的回答是基于它的假设。
推荐阅读
- google-cloud-composer - 无法更新 Google-Cloud-Composer 环境变量
- python - 使用分配矩阵连接节点
- ruby-on-rails - Rails 未定义的方法“持续存在?”
- r - 将一列拖到最左边
- perl - perl 对日期时间字符串的多个数组进行排序
- python-3.x - 超过时间限制python
- c# - C# QueryFrame 中的 EmguCV 返回上一个查询的帧并使用 dispose 在我的应用程序中添加延迟
- android - 当我更新我的应用程序时,Android 小部件被删除
- scala - 使用字节数组数组创建 Spark 数据集时出错
- r - 子集行不包括特殊值