如何解决日历小时部分提前5小时,无法对其进行调整
我的应用中有两个组件。一个UIDATEPICKER,设置为仅选择时间HOURS AND MINUTES。日历(FSCALENDAR第三方),它为我选择日期,月份和年份。我试图结合从uidatepicker中选择的时间和从日历中选择的日期来创建通知。到目前为止,它仍在工作,但要提前5个小时。我认为是因为uidatepicker的12小时格式。如何提取24小时格式的小时部分?
下面的代码用于提取日期和时间。
class ReminderViewController: UIViewController,FSCalendarDelegate,FSCalendarDataSource {
var reminderDate : String?
var reminderDay : Int?
var reminderMonth : Int?
var reminderYear : Int?
var reminderHour : Int?
var reminderMinute : Int?
@IBOutlet weak var rDatePicker: UIDatePicker!
@IBAction func reminderDatePicker(_ sender: Any) {
var df = DateFormatter()
let date = rDatePicker.date
let dateAsString = df.string(from: date)
let components = Calendar.current.dateComponents([.hour,.minute],from: date)
reminderHour = components.hour!
reminderMinute = components.minute!
}
@IBOutlet weak var doneButton: UIButton!
@IBAction func doneAction(_ sender: Any) {
let calendar = Calendar.current
let totalComponents = NSDateComponents()
totalComponents.day = reminderDay!
totalComponents.hour = reminderHour!
totalComponents.month = reminderMonth!
totalComponents.minute = reminderMinute!
totalComponents.year = reminderYear!
let finalDate = calendar.date(from: totalComponents as DateComponents)
print(finalDate)
}
override func viewDidLoad() {
super.viewDidLoad()
self.view.widthAnchor.constraint(equalToConstant: 500).isActive = true
reminderCalendar.delegate = self
reminderCalendar.dataSource = self
let totalComponents = NSDateComponents()
let calendar = Calendar.current
let date = Date()
let components = Calendar.current.dateComponents([.hour,.minute,.month,.day,.year],from: date)
reminderHour = components.hour!
reminderMinute = components.minute!
reminderMonth = components.month!
reminderDay = components.day!
reminderYear = components.year!
let finalDate = calendar.date(from: components as DateComponents)
print("FINAL",finalDate)
}
func calendar(_ calendar: FSCalendar,didSelect date: Date,at monthPosition: FSCalendarMonthPosition) {
print(date)
var df = DateFormatter()
df = DateFormatter()
df.dateFormat = "dd-MM-yyyy"
reminderDate = df.string(from: date)
reminderMonth = Calendar.current.component(.month,from: date)
reminderDay = Calendar.current.component(.day,from: date)
reminderYear = Calendar.current.component(.year,from: date)
print(reminderMonth)
print(reminderYear)
print(reminderDay)
}
}
解决方法
获取日期和时间,并根据您所在的时区将其转换为UST格式,这就是为什么它会造成问题
func localToUTC(date:String) -> String {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
dateFormatter.calendar = NSCalendar.current
dateFormatter.timeZone = TimeZone.current
let dt = dateFormatter.date(from: date)
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter.string(from: dt!)
}
func calendar(_ calendar: FSCalendar,didSelect date: Date,at monthPosition: FSCalendarMonthPosition) {
print(date)
var df = DateFormatter()
df = DateFormatter()
df.dateFormat = "yyyy:MM:dd:HH:mm:ss"
reminderDate = df.string(from: date)
reminderMonth = Calendar.current.component(.month,from: date)
reminderDay = Calendar.current.component(.day,from: date)
reminderYear = Calendar.current.component(.year,from: date)
print(reminderMonth)
print(reminderYear)
print(reminderDay)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。