gpt4 book ai didi

ios - 从 DateFormatter 得到错误的输出

转载 作者:行者123 更新时间:2023-11-29 05:46:50 27 4
gpt4 key购买 nike

我从下面的代码中获取上周的日期,一周从星期六开始。它正在获取日期(2019-04-27 18:30:00 +0000、019-05-04 18:30:00 +0000),但是当我尝试设置 DateFormatter 时,它正在获取日期(28 -2019 年 4 月 00:00:00、2019 年 5 月 5 日 00:00:00)。我希望一周从印度本地时间和日期的星期一开始。

var dateFormatter:DateFormatter!
var date:Date!

dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
date = Date()

var calendar = Calendar.current
calendar.firstWeekday = 2 // 1 is Sunday, 2 is Monday
let lastWeek = calendar.date(byAdding: .weekOfYear, value: -1, to: Date())
if let lastWeek = lastWeek {
var startOfLastWeek = Date()
var interval = TimeInterval(0)

_ = Calendar.current.dateInterval(of: .weekOfYear, start: &startOfLastWeek, interval: &interval, for: lastWeek)
let endOfLastWeek = startOfLastWeek.addingTimeInterval(interval)
print(startOfLastWeek)//2019-04-27 18:30:00 +0000
print(endOfLastWeek)//019-05-04 18:30:00 +0000

let startWeekString = dateFormatter.string(from: startOfLastWeek)
let endWeekString = dateFormatter.string(from: endOfLastWeek)
print(startWeekString)//28-04-2019 00:00:00
print(endWeekString)//05-05-2019 00:00:00

最佳答案

在任何编程语言中,日期始终采用UTC格式,它没有时区。 DateFormatter 用于通过提供时区以本地/本地化格式显示Date

日期格式化程序允许您将其转换为人类可读的字符串。在手机中:

  1. 如果您有中央服务器/数据库,那么您应该以 UTC 格式保存日期。
  2. 当手机上显示时间时,将 UTC 转换为本地时区。

不要试图使其变得过于复杂。

使用以下代码查找上周的星期一和星期日:

var date:Date!

dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
dateFormatter.timeZone=TimeZone.current
TimeZone.current
date = Date()

var calendar = Calendar.current
calendar.firstWeekday = 2 // 1 is Sunday, 2 is Monday
let lastWeek = calendar.date(byAdding: .weekOfYear, value: -1, to: Date())
if let lastWeek = lastWeek {
var startOfLastWeek = Date()
var interval = TimeInterval(0)

_ = Calendar.current.dateInterval(of: .weekOfYear, start: &startOfLastWeek, interval: &interval, for: lastWeek)
startOfLastWeek = calendar.date(byAdding: .weekday, value: 1, to: startOfLastWeek)!
print(interval)
interval = interval - 1
let endOfLastWeek = startOfLastWeek.addingTimeInterval(interval)
print(startOfLastWeek)//2019-04-27 18:30:00 +0000
print(endOfLastWeek)//019-05-04 18:30:00 +0000

let startWeekString = dateFormatter.string(from: startOfLastWeek)
let endWeekString = dateFormatter.string(from: endOfLastWeek)
print(startWeekString)//28-04-2019 00:00:00
print(endWeekString)//05-05-2019 00:00:00
}

关于ios - 从 DateFormatter 得到错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56071500/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com