如何在字符串 Swift 中附加单引号?

How to append single quotes in string Swift?

提问人:Sham Dhiman 提问时间:10/11/2023 最后编辑:AlexanderSham Dhiman 更新时间:10/11/2023 访问量:55

问:

我有一个字符串,如 .我想附加单引号和连字符,我的结果应该是这样的:。20230914T07:37:43.000Z2023-09-14'T'07:37:43.000Z

我已经尝试了下面的代码,但是我的字符串中会自动添加一个反斜杠,从而导致.2023-09-14'T'07:37:43.000Z

法典:

let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = formatter

var welcome = "20230914T07:37:43.000Z"
welcome.insert("-", at: welcome.index(welcome.startIndex, offsetBy: 4))
welcome.insert("-", at: welcome.index(welcome.startIndex, offsetBy: 7))
print(2023-09-14T07:37:43.000Z)

// Option 1
welcome.insert(#"'"#, at: welcome.index(welcome.startIndex, offsetBy: 10))
welcome.insert(#"'"#, at: welcome.index(welcome.startIndex, offsetBy: 12))

// Option 2
welcome.insert("'", at: welcome.index(welcome.startIndex, offsetBy: 10))
welcome.insert("'", at: welcome.index(welcome.startIndex, offsetBy: 12))

dateString = welcome

let date: Date? = dateFormatterGet.date(from: dateString)
print(date) // -> nil
return dateFormatterPrint.string(from: date!); ////Crash

// Output: '2023-09-14'T'07:37:43.000Z'

我已经尝试了这两个选项,但我仍然会自动将反斜杠添加到我的字符串中。

问题:如何在没有黑斜杠的情况下附加单引号和连字符?

有人可以向我解释如何做到这一点吗,我已经尝试了上面的代码,但还没有结果。如果我做错了,请纠正我。

任何帮助将不胜感激

快速 日期格式化

评论

1赞 easleyfixed 10/11/2023
如果你出于视觉原因试图这样做,这里有一个很好的技巧,尝试使用'而不是',用户很难知道其中的区别,你不必与MySQL或其他系统争吵,因为缺乏'终止。

答:

2赞 HangarRash 10/11/2023 #1

没有理由在字符串中添加撇号。撇号只需要在日期格式化程序的 in 周围,以指示 是按字面意思处理的,而不是作为格式说明符。welcomeTdateFormatT

您还应该避免在字符串中添加连字符,而只需从 中删除连字符即可。a 的整个想法是选择与您将要解析的字符串匹配的日期格式。welcomedateFormatdateFormat

考虑到所有这些因素,您的代码将变成:

let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyyMMdd'T'HH:mm:ss.SSSZ"

var welcome = "20230914T07:37:43.000Z"

if let date = dateFormatterGet.date(from: welcome) {
    let dateFormatterPrint = DateFormatter()
    dateFormatterPrint.dateFormat = formatter

    return dateFormatterPrint.string(from: date)
} else {
    // return some indicator of failure
}

或者,您可能希望使用 ISO8601DateFormatter 来处理受支持的ISO8601格式之一的字符串。

评论

1赞 Leo Dabus 10/11/2023
与问题本身无关,但如果投入生产,这仍然会有一些问题。在设置 dateFormat 之前,您没有设置日期格式化的日历和区域设置。尝试将设备的日历设置为佛教日历,或者简单地将设备的 24 小时设置更改为 12 小时,并尝试解析中午 12 点之后时间小时的日期字符串。
0赞 HangarRash 10/11/2023
@LeoDabus 好点。我更关注问题的细节,但将区域设置设置为公历和日历设置为公历是个好主意。话又说回来,按照我在最后的建议使用会更简单。en_US_POSIXISO8601DateFormatter