You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义周历在Samsung SM-T531与Moto G设备上返回上周日期的问题

解决自定义周历在特定设备返回上周日期的问题

嘿,我来帮你搞定这个头疼的问题!你开发的自定义周历在多数设备上都正常,偏偏在Samsung SM-T531和Moto G上会返回上周日期,这个问题大概率和Calendar类的设备默认配置以及你代码里的方法调用顺序有关,咱们一步步来排查修复:

问题根源分析

  • 你现在的代码是先把Calendar设置为当前时间,再调用setFirstDayOfWeek(Calendar.MONDAY)。但Calendar在设置时间时,已经基于设备默认的周规则(比如部分设备默认周日为一周起始)计算好了周相关的信息,之后再修改起始日不会自动重新计算当前周的范围,这就导致在那些默认周规则不同的设备上,周范围直接跑偏到上周。
  • 另外,部分三星和摩托罗拉设备的系统可能对周的计算逻辑有自定义设置,进一步放大了这个偏差。

修复方案

1. 调整方法调用顺序(最直接的修复)

先设置一周的起始日,再把Calendar设置为当前时间,这样Calendar会直接基于你指定的周一作为起始日来计算周信息:

public WeekCalendar(Context context) {
    this.mContext = context;
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    // 先指定一周起始日为周一
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    // 再设置当前时间
    calendar.setTimeInMillis(System.currentTimeMillis());
    Log.e(TAG, "Formatted Current Date Before - " + format.format(calendar.getTime()));
    // 后续周历逻辑...
}

2. 手动对齐本周起始日(兜底方案)

如果调整顺序后还是有问题,可以手动把日期修正到本周一,彻底确保周范围正确:

public WeekCalendar(Context context) {
    this.mContext = context;
    DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    calendar.setFirstDayOfWeek(Calendar.MONDAY);
    calendar.setTimeInMillis(System.currentTimeMillis());
    
    // 计算当前日期距离本周一的天数差
    int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
    int daysToAdjust;
    if (dayOfWeek == Calendar.MONDAY) {
        daysToAdjust = 0;
    } else if (dayOfWeek == Calendar.SUNDAY) {
        // 周日的话,需要往前调6天到周一
        daysToAdjust = -6;
    } else {
        // 周二到周六,往前调对应天数
        daysToAdjust = -(dayOfWeek - Calendar.MONDAY);
    }
    calendar.add(Calendar.DAY_OF_MONTH, daysToAdjust);
    
    Log.e(TAG, "Adjusted to Current Week Monday - " + format.format(calendar.getTime()));
    // 后续周历逻辑...
}

3. 统一周计算规则

还可以加上setMinimalDaysInFirstWeek(7),强制要求一周必须有7天,避免不同设备对“第一周”的判定差异:

calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.setMinimalDaysInFirstWeek(7); // 加上这行
calendar.setTimeInMillis(System.currentTimeMillis());

你可以先试试第一种方案,这应该就能解决大部分情况,如果还有问题再叠加后面的兜底逻辑,应该就能搞定那两台设备的异常了!

内容的提问来源于stack exchange,提问作者Umesh AHIR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:22:24