【问题标题】:CodenameOne - fixing Calendar get(Calendar.DAY_OF_WEEK) bigger value than expectedCodenameOne - 修复日历 get(Calendar.DAY_OF_WEEK) 比预期更大的值
【发布时间】:2021-10-31 08:17:44
【问题描述】:

我正在创建一种解决方法来修复我的应用中 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 calendar simpledateformat dayofweek


    【解决方案1】:

    我了解现代 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
    

    免责声明:我特别不知道代号一Calendar。我强烈希望它的行为与原始 java.util.Calendar 完全相同,我的回答是基于它的假设。

    【讨论】:

      猜你喜欢
      • 2018-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多