簡體   English   中英

從DateFormatter獲取錯誤的輸出

[英]Getting wrong output from DateFormatter

我上周從代碼下面開始,星期六開始。 它正在獲取日期(2019-04-27 18:30:00 +0000,019-05-04 18:30:00 +0000),但是當我嘗試設置DateFormatter它正在獲取日期(28-04-2019 00:00) :00,05-05-2019 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

任何編程語言中的Date始終為UTC,它沒有時區。 DateFormatter用於通過提供時區以本地/本地化格式顯示Date

Date Formatter允許您將其轉換為人類可讀的字符串。 在手機中:

  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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM