ios - 如何从静态字符串中获取日期?

标签 ios swift nsdateformatter fscalendar

我想像下面的代码一样获得完整的日期和时间,

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。还要根据您的需要处理这些选项。

关于ios - 如何从静态字符串中获取日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994482/

相关文章:

ios - 如何设置UILabel最大长度?

构建应用程序时 Swift 环境变量返回 nil

uitableview - 从选定行获取导航栏标题

iPhone NSDateFormatter 时区转换

ios - 将字符串转换为日期时,日期存在差异

ios - iOS 12 中通知中心下拉时计时器会中断

ios - React native xcode 调试和发布方案两种不同的构建

iOS Swift 相同的代码在 iPad 和 iPhone 上运行时会产生不同的日期格式

c++ - 使用 C++ 在 OpenGL ES 中显示纹理时出现问题

ios - 如何修复非法配置?