将带有时区的字符串转换为日期

时间:2017-05-30 11:25:39

标签: swift date swift3 timezone

我有这种类型的字符串,并希望将其转换为日期

  

" 2017-05-27T00:00:00.000 + 0400"

但这些格式化程序都没有将其转换为日期

" YYYY-MM-DD' T' HH:MM:SSSZ"

" YYYY-MM-DD' T' HH:MM:SSSX"

4 个答案:

答案 0 :(得分:2)

您忘了添加ss秒,因此正确的格式应为yyyy-MM-dd'T'HH:mm:ss.SSSZ

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.date(from: "2017-05-27T00:00:00.000+0400")

答案 1 :(得分:2)

您的错误是seconds丢失了。所以正确的格式应该是:yyyy-MM-dd'T'HH:mm:ss.SSSZ。您还可以使用扩展名来实现此目的:

extension String {
    var toCustomDate: Date {
        return Date.Formatter.customDate.date(from: self)!
    }
}

extension Date {
    struct Formatter {
        static let customDate: DateFormatter = {
            let formatter = DateFormatter()
            formatter.locale = Locale(identifier: "en_US_POSIX")
            formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
            return formatter
        }()
    }

    var customDate: String {
        return Formatter.customDate.string(from: self)
    }
}

let str = "2017-05-27T00:00:00.000+0400"
let date = str.toCustomDate

如果您有更多日期格式,请将它们添加到扩展程序。

答案 2 :(得分:1)

你可以这样做

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>


<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".MyReceiver">
        <intent-filter>
            <action android:name="android.provider.Telephony.SMS_RECEIVED"/>

        </intent-filter>
    </receiver>
</application>

答案 3 :(得分:0)

尝试此功能

        func getGMTDateFrom(String string : String) -> Date? {

            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss zz"
            let dateObj = dateFormatter.date(from: string)
            return dateObj
        }

根据您的需要更改日期格式。