如何在swift中将'Date'类型的转换值返回为'String'

Posted

技术标签:

【中文标题】如何在swift中将\'Date\'类型的转换值返回为\'String\'【英文标题】:How to return convert value of type 'Date' to 'String' in swift如何在swift中将'Date'类型的转换值返回为'String' 【发布时间】:2019-07-28 11:10:05 【问题描述】:

我想在返回布尔值之后重叠日期。

func overLap(start1: String, end1: String, start2: String, end2: String) -> Bool 
    if start1 < end2 && start2 < end1 
        return false
    
    return true


let start1 = "2019/02/01"
let end1 = "2019/02/20"
let start2 = "2019/02/15"
let end2 = "2019/03/02"

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy/MM/dd"

let dateFromString1 = dateFormatter.date(from: start1)
let dateFromString2 = dateFormatter.date(from: end1)
let dateFromString3 = dateFormatter.date(from: start2)
let dateFromString4 = dateFormatter.date(from: end2)

let myString = formatter.String(from: )

let result: Bool = overLap(start1: dateFromString1, end1: dateFromString2, start2: dateFromString3, end2: dateFromString4)
print(result)

这是错误:无法转换“日期”类型的值?到预期的参数类型“字符串” 让结果: Bool = overLap(start1: dateFromString1, end1: dateFromString2, start2: dateFromString3, end2: dateFromString4)

【问题讨论】:

如果您将字符串转换为 Date 对象,那么您的函数需要将 Date 作为参数的参数类型,overLap(start1: Date, end1: Date, start2: Date, end2: Date) 【参考方案1】:

这是一个典型的类型不匹配错误。您无法比较苹果 (Date) 和橙子 (String)。

您不需要创建Date 实例。将字符串与numeric 选项进行比较

func overLap(start1: String, end1: String, start2: String, end2: String) -> Bool 
    if start1.compare(end2, options: .numeric) == .orderedAscending
        && start2.compare(end1, options: .numeric) == .orderedAscending 
        return false
    
    return true


let start1 = "2019/02/01"
let end1 = "2019/02/20"
let start2 = "2019/02/15"
let end2 = "2019/03/02"

let result = overLap(start1: start1, end1: end1, start2: start2, end2: end2)
print(result)

【讨论】:

【参考方案2】:

修改overLap方法为,

func overLap(start1: Date, end1: Date, start2: Date, end2: Date) -> Bool 
    if start1.compare(end2) == .orderedAscending && start2.compare(end1) == .orderedAscending 
        return false
    
    return true

在上述方法中,不是使用String作为参数类型,而是使用Date。接下来,使用compare(_:) 匹配start1, end1, start2 and end2 日期。

用法:

let start1 = "2019/02/01"
let end1 = "2019/02/20"
let start2 = "2019/02/15"
let end2 = "2019/03/02"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy/MM/dd"

if let dateFromString1 = dateFormatter.date(from: start1),
    let dateFromString2 = dateFormatter.date(from: end1),
    let dateFromString3 = dateFormatter.date(from: start2),
    let dateFromString4 = dateFormatter.date(from: end2) 
    let result: Bool = overLap(start1: dateFromString1, end1: dateFromString2, start2: dateFromString3, end2: dateFromString4)
    print(result)

【讨论】:

Date 符合 Comparable 因此支持 &lt; 运算符。

以上是关于如何在swift中将'Date'类型的转换值返回为'String'的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Swift 中将 NSURL 转换为字符串

如何在 Redshift 中将 BIGINT 转换为 DATE?

在 swift 中将 String 类型数组转换为 Float 类型数组 不能将类型 'String' 的值分配给类型 'Double' 的下标。

无法在 Swift 中将“__NSSingleObjectArrayI”类型的值转换为“NSDictionary”

如何在 Swift 5 中将“日期”转换为“数据”,反之亦然? [复制]

无法在 Swift 2 中将“__NSCFNumber”类型的值转换为“NSString”