首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

iOS App 傳遞重復鬧鐘日期:服務端按時間戳判斷周幾

     編輯:程式設計綜合問答

客戶端傳遞數據結構

{
  "alarmId": "uuid",
  "time": "07:30",           // 本地時間 HH:mm
  "timezone": "Asia/Shanghai", // IANA 時區標識符
  "repeatDays": [1,3,5]      // 1=周一 ... 7=周日,或位掩碼 0b1010100
}

服務端判斷邏輯

  1. 接收請求時獲取服務器當前時間戳(UTC),或使用客戶端上報的 timestamp 字段(需信任客戶端時間)。
  2. 結合 timezone 將時間戳轉換為該時區的 LocalDateTime。
  3. 提取 DayOfWeek(Java: localDate.getDayOfWeek(),Go: time.Weekday,Node: date.getDay())。
  4. 判斷該 DayOfWeek 是否在 repeatDays 列表中。
  5. 若匹配,推送通知/執行任務。

關鍵點

  • 服務器以自身時鐘為準,避免客戶端時間被篡改/偏移。
  • 存儲鬧鐘時保存 timezone,定時任務按該時區觸發(Quartz CronTrigger 支持時區)。
  • 夏令時切換由時區數據庫自動處理,無需手動調整。

代碼片段

Java 8+:

ZonedDateTime now = Instant.now().atZone(ZoneId.of(alarm.getTimezone()));
if (alarm.getRepeatDays().contains(now.getDayOfWeek().getValue())) {
    // 觸發
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved