我正在尝试从服务器取回日期增加3个小时。 publication.DateTime
是一个字符串,在进行操作之前,我需要先将其转换为日期。
这是我的尝试:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from:(publication.DateTime)!) //date is nil here
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour], from: date!)
let finalDate = calendar.date(from:components)
let newDate = calendar.date(
byAdding: .hour,
value: 3,
to: finalDate!)
我在做什么错?我试图在线研究此问题,似乎大多数帖子都来自旧版本的Swift,所以也许新的Swift中有些东西我丢失或做错了吗?
编辑:更改日期格式有效,但现在字符串onbject中的时间增加了3小时,例如15:0:0而不是之前的12:34:17我希望是15:34:17。
答案 0 :(得分:1)
您只需要将<value of owner>+"/"
更改为yyyy-MM-dd'T'HH:mm:ssZ
就可以了。
答案 1 :(得分:1)
添加3小时后,您的日期没有得到分钟和秒钟的原因是您没有将这些组件包括在组件数组中,请参考以下代码:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
let date = dateFormatter.date(from:(publication.DateTime)!)
let calendar = Calendar.current
// Here .minute and .second is added in below line which is missing in your code
let components = calendar.dateComponents([.year, .month, .day, .hour, .minute, .second], from: date!)
let finalDate = calendar.date(from:components)
let newDate = calendar.date(
byAdding: .hour,
value: 3,
to: finalDate!)