如何从静态字符串中获取日期?
How to get date from static string?
我想像下面的代码一样获得完整的日期,
func findDate(date: Date)
{
let format1: DateFormatter = DateFormatter()
format1.dateFormat = "yyyy-MM-dd"
let onlyDate = format1.string(from: date) // Here date is like 2019-11-21
let dateStr = "\(onlyDate) 10:00 AM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.calendar = NSCalendar.current
dateFormatter.timeZone = TimeZone.current
let newDate = dateFormatter.date(from: dateStr)
print(newDate) // It returns nil
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let newDateStrInUTC = dateFormatter.string(from: newDate ?? Date()) // Not proper due to newDate = nil
}
在 findDate
函数中 date
参数的日期类似于 2019-11-21 18:30:00 +0000
。我想在该日期添加我的自定义时间(上午 10:00)。
我从 FSCalender
那里收到了这个日期 (2019-11-21 18:30:00 +0000
)。
我想要这样的输出2019-11-21 12:00 PM
试试这个代码。它会在不更改日期的情况下更改时间组件。
func findDate(date: Date)
{
let calendar = Calendar.current
let timeString = "10:00 AM"
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
let customDate = formatter.date(from: timeString)
let hour = calendar.component(.hour, from: customDate!)
let min = calendar.component(.minute, from: customDate!)
let sec = calendar.component(.second, from: customDate!)
let resultDate = Calendar.current.date(bySettingHour: hour, minute: min, second: sec, of: date)
print(resultDate!)
}
现在您可以根据需要使用resultDate了。还要根据您的需要处理这些选项。
试试下面这个:
let dateTimeToConvert = yourDateTimeHere
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_EN")
formatter.timeZone = TimeZone.current
formatter.dateFormat = "YYYY-MM-dd HH:mm a"
formatter.amSymbol = "AM"
formatter.pmSymbol = "PM"
let converted = formatter.date(from: "\(dateTimeToConvert)")
print(converted)
请注意,我使用的语言环境不同,只需使用您的语言环境即可。我还使用了日期时间来转换它。但是你可以通过简单地在日期转换后添加时间来实现你想要的。
你也可以像这样搞乱日期时间结构
format = "HH:mm: a 'on' MMMM dd, yyyy"
这个格式用起来像这样
“2019 年 1 月 12 日上午 9:01”
问题出在 findDate(date: Date)
函数中的以下行。
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"
将其替换为以下内容,您的函数应该会按预期开始工作。
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm a"
解释:
HH 用于将日期设置为 24 小时格式。
如果您想以 AM/PM
的 12 小时格式显示日期,请使用小 hh
当您将 10:00 AM
附加到 onlyDate
字符串时。您应该使用 hh:mm a
将字符串正确转换为日期。
希望对您有所帮助。
我想像下面的代码一样获得完整的日期,
func findDate(date: Date)
{
let format1: DateFormatter = DateFormatter()
format1.dateFormat = "yyyy-MM-dd"
let onlyDate = format1.string(from: date) // Here date is like 2019-11-21
let dateStr = "\(onlyDate) 10:00 AM"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.calendar = NSCalendar.current
dateFormatter.timeZone = TimeZone.current
let newDate = dateFormatter.date(from: dateStr)
print(newDate) // It returns nil
dateFormatter.timeZone = TimeZone(abbreviation: "UTC")
let newDateStrInUTC = dateFormatter.string(from: newDate ?? Date()) // Not proper due to newDate = nil
}
在 findDate
函数中 date
参数的日期类似于 2019-11-21 18:30:00 +0000
。我想在该日期添加我的自定义时间(上午 10:00)。
我从 FSCalender
那里收到了这个日期 (2019-11-21 18:30:00 +0000
)。
我想要这样的输出2019-11-21 12:00 PM
试试这个代码。它会在不更改日期的情况下更改时间组件。
func findDate(date: Date)
{
let calendar = Calendar.current
let timeString = "10:00 AM"
let formatter = DateFormatter()
formatter.dateFormat = "hh:mm a"
let customDate = formatter.date(from: timeString)
let hour = calendar.component(.hour, from: customDate!)
let min = calendar.component(.minute, from: customDate!)
let sec = calendar.component(.second, from: customDate!)
let resultDate = Calendar.current.date(bySettingHour: hour, minute: min, second: sec, of: date)
print(resultDate!)
}
现在您可以根据需要使用resultDate了。还要根据您的需要处理这些选项。
试试下面这个:
let dateTimeToConvert = yourDateTimeHere
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_EN")
formatter.timeZone = TimeZone.current
formatter.dateFormat = "YYYY-MM-dd HH:mm a"
formatter.amSymbol = "AM"
formatter.pmSymbol = "PM"
let converted = formatter.date(from: "\(dateTimeToConvert)")
print(converted)
请注意,我使用的语言环境不同,只需使用您的语言环境即可。我还使用了日期时间来转换它。但是你可以通过简单地在日期转换后添加时间来实现你想要的。
你也可以像这样搞乱日期时间结构
format = "HH:mm: a 'on' MMMM dd, yyyy"
这个格式用起来像这样
“2019 年 1 月 12 日上午 9:01”
问题出在 findDate(date: Date)
函数中的以下行。
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm a"
将其替换为以下内容,您的函数应该会按预期开始工作。
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm a"
解释:
HH 用于将日期设置为 24 小时格式。
如果您想以 AM/PM
的 12 小时格式显示日期,请使用小 hh当您将 10:00 AM
附加到 onlyDate
字符串时。您应该使用 hh:mm a
将字符串正确转换为日期。
希望对您有所帮助。