Tôi muốn chuyển đổi "2014-07-15 06: 55: 14.198000 + 00: 00" chuỗi ngày này thành NSDate trong Swift.
Tôi muốn chuyển đổi "2014-07-15 06: 55: 14.198000 + 00: 00" chuỗi ngày này thành NSDate trong Swift.
Câu trả lời:
thử cái này:
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = /* find out and place date format from
* http://userguide.icu-project.org/formatparse/datetime
*/
let date = dateFormatter.dateFromString(/* your_date_string */)
Để biết thêm truy vấn, hãy kiểm tra các lớp NSDateFormatter và DateFormatter của khung Foundation cho Objective-C và Swift, tương ứng.
Swift 3 trở lên (bao gồm Swift 4)
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = /* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/
guard let date = dateFormatter.date(from: /* your_date_string */) else {
fatalError("ERROR: Date conversion failed due to mismatched format.")
}
// use date constant here
yyyy-MM-dd hh:mm:ssZZZ
. Nhưng tôi không thể lấy đối tượng ngày ra khỏi chuỗi.
"2014-07-15 10:55:14 +0000"
chính xác. Theo NSDate
mô tả, đầu ra của ngày sẽ được tính với chênh lệch (ở đây, GMT -4 giờ). Nếu bạn muốn có sự khác biệt giữa GMT và UTC, -0400
hãy kiểm tra tham chiếu
hh
đó nên được HH
. Cảm ơn!
yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
. Tôi giả sử Z
chỉ là một nhân vật ở đây. Hãy nhớ rằng, Z
có một ý nghĩa đặc biệt quá. Nếu bạn muốn Z
chỉ định như basic hms
định dạng sẽ được yyyy-MM-dd'T'HH:mm:ss.SSSZ
.
Swift 4
import Foundation
let dateString = "2014-07-15" // change to your date format
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let date = dateFormatter.date(from: dateString)
println(date)
Swift 3
import Foundation
var dateString = "2014-07-15" // change to your date format
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
var date = dateFormatter.dateFromString(dateString)
println(date)
Tôi có thể làm điều đó với mã này.
dd
thay vì DD
sẽ giúp khắc phục vấn đề "luôn luôn là tháng một".
yyyy-MM-dd
nếu không, ngày được phân tích cú pháp bị kẹt vào tháng 1 - Tôi đã cập nhật câu trả lời để phản ánh sự thay đổi.
func convertDateFormatter(date: String) -> String
{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date = dateFormatter.dateFromString(date)
dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let timeStamp = dateFormatter.stringFromDate(date!)
return timeStamp
}
Cập nhật cho Swift 3.
func convertDateFormatter(date: String) -> String
{
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"//this your string date format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
let date = dateFormatter.date(from: date)
dateFormatter.dateFormat = "yyyy MMM EEEE HH:mm"///this is what you want to convert format
dateFormatter.timeZone = NSTimeZone(name: "UTC") as TimeZone!
let timeStamp = dateFormatter.string(from: date!)
return timeStamp
}
import Foundation
extension DateFormatter {
convenience init (format: String) {
self.init()
dateFormat = format
locale = Locale.current
}
}
extension String {
func toDate (dateFormatter: DateFormatter) -> Date? {
return dateFormatter.date(from: self)
}
func toDateString (dateFormatter: DateFormatter, outputFormat: String) -> String? {
guard let date = toDate(dateFormatter: dateFormatter) else { return nil }
return DateFormatter(format: outputFormat).string(from: date)
}
}
extension Date {
func toString (dateFormatter: DateFormatter) -> String? {
return dateFormatter.string(from: self)
}
}
var dateString = "14.01.2017T14:54:00"
let dateFormatter = DateFormatter(format: "dd.MM.yyyy'T'HH:mm:ss")
let date = Date()
print("original String with date: \(dateString)")
print("date String() to Date(): \(dateString.toDate(dateFormatter: dateFormatter)!)")
print("date String() to formated date String(): \(dateString.toDateString(dateFormatter: dateFormatter, outputFormat: "dd MMMM")!)")
let dateFormatter2 = DateFormatter(format: "dd MMM HH:mm")
print("format Date(): \(date.toString(dateFormatter: dateFormatter2)!)")
Nếu bạn thường xuyên cần phân tích chuỗi thành một ngày, bạn có thể muốn chuyển chức năng thành một tiện ích mở rộng. Tôi đã tạo một tệp sharedCode.swift và đặt các tiện ích mở rộng của mình ở đó:
extension String
{
func toDateTime() -> NSDate
{
//Create Date Formatter
let dateFormatter = NSDateFormatter()
//Specify Format of String to Parse
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss.SSSSxxx"
//Parse into NSDate
let dateFromString : NSDate = dateFormatter.dateFromString(self)!
//Return Parsed Date
return dateFromString
}
}
Sau đó, nếu bạn muốn chuyển đổi chuỗi của mình thành NSDate, bạn có thể viết một cái gì đó như:
var myDate = myDateString.toDateTime()
hh
nên có HH
trong trường hợp này.
Dành cho Swift 3
func stringToDate(_ str: String)->Date{
let formatter = DateFormatter()
formatter.dateFormat="yyyy-MM-dd hh:mm:ss Z"
return formatter.date(from: str)!
}
func dateToString(_ str: Date)->String{
var dateFormatter = DateFormatter()
dateFormatter.timeStyle=DateFormatter.Style.short
return dateFormatter.string(from: str)
}
Điều đầu tiên Apple đề cập là bạn lưu trữ bộ định dạng của bạn ...
Liên kết đến tài liệu của Apple nêu chính xác cách thực hiện việc này:
Bộ định dạng bộ đệm cho hiệu quả Tạo bộ định dạng ngày không phải là một hoạt động rẻ tiền. ... lưu trữ một ví dụ duy nhất ...
Sử dụng toàn cầu ...
let df : DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
return formatter
}()
Sau đó, chỉ cần sử dụng định dạng đó bất cứ nơi nào ...
let s = df.string(from: someDate)
hoặc là
let d = df.date(from: someString)
Hoặc sử dụng bất kỳ phương thức nào khác, nhiều phương pháp thuận tiện trên DateFormatter.
(Nếu bạn viết tiện ích mở rộng trên Chuỗi, mã của bạn hoàn toàn "lộn ngược" - bạn không thể sử dụng bất kỳ cuộc gọi dateFormatter nào!)
Lưu ý rằng thông thường bạn sẽ có một vài trong số những quả cầu đó .. chẳng hạn như "formatForClient" "formatForPubNub" "formatForDisplayOnInvoiceScreen" .. vv
Swift hỗ trợ phần mở rộng, với phần mở rộng bạn có thể thêm một chức năng mới cho một hiện class
, structure
, enumeration
, hoặcprotocol
loại.
Bạn có thể thêm một init
chức năng mới vào NSDate
đối tượng bằng cách mở rộng đối tượng bằng extension
từ khóa.
extension NSDate
{
convenience
init(dateString:String) {
let dateStringFormatter = NSDateFormatter()
dateStringFormatter.dateFormat = "yyyyMMdd"
dateStringFormatter.locale = NSLocale(localeIdentifier: "fr_CH_POSIX")
let d = dateStringFormatter.dateFromString(dateString)!
self.init(timeInterval:0, sinceDate:d)
}
}
Bây giờ bạn có thể khởi tạo một đối tượng NSDate bằng cách sử dụng:
let myDateObject = NSDate(dateString:"2010-12-15 06:00:00")
df.date(from: beginDateString)
, tôi sẽ nhận được một con số không! tại sao? ( df = DateFormatter()
)
Kể từ Swift 3, nhiều tiền tố NS đã bị loại bỏ.
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
/* date format string rules
* http://userguide.icu-project.org/formatparse/datetime
*/
let date = dateFormatter.date(from: dateString)
df.date(from: beginDateString)
, tôi sẽ nhận được một con số không! tại sao? ( df = DateFormatter()
)
Swift 3,4:
2 chuyển đổi hữu ích:
string(from: Date) // to convert from Date to a String
date(from: String) // to convert from String to Date
Cách sử dụng: 1.
let date = Date() //gives today's date
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"
let todaysDateInUKFormat = dateFormatter.string(from: date)
2.
let someDateInString = "23.06.2017"
var getDateFromString = dateFormatter.date(from: someDateInString)
CHO SWift 3.1
func convertDateStringToDate(longDate: String) -> String{
/* INPUT: longDate = "2017-01-27T05:00:00.000Z"
* OUTPUT: "1/26/17"
* date_format_you_want_in_string from
* http://userguide.icu-project.org/formatparse/datetime
*/
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
let date = dateFormatter.date(from: longDate)
if date != nil {
let formatter = DateFormatter()
formatter.dateStyle = .short
let dateShort = formatter.string(from: date!)
return dateShort
} else {
return longDate
}
}
LƯU Ý: ĐIỀU NÀY S R TRẢ LẠI NGUỒN GỐC XUẤT XỨ NẾU LRI
Công việc này đối với tôi ..
import Foundation
import UIKit
//dateString = "01/07/2017"
private func parseDate(_ dateStr: String) -> String {
let simpleDateFormat = DateFormatter()
simpleDateFormat.dateFormat = "dd/MM/yyyy" //format our date String
let dateFormat = DateFormatter()
dateFormat.dateFormat = "dd 'de' MMMM 'de' yyyy" //format return
let date = simpleDateFormat.date(from: dateStr)
return dateFormat.string(from: date!)
}
Dưới đây là một số tùy chọn chuyển đổi định dạng chuỗi thành ngày có thể được sử dụng trong iOS nhanh chóng.
Thursday, Dec 27, 2018
định dạng = EEEE, MMM d, yyyy
12/27/2018
định dạng = MM/dd/yyyy
12-27-2018 09:59
định dạng = MM-dd-yyyy HH:mm
Dec 27, 9:59 AM
định dạng = MMM d, h:mm a
December 2018
định dạng = MMMM yyyy
Dec 27, 2018
định dạng = MMM d, yyyy
Thu, 27 Dec 2018 09:59:19 +0000
định dạng = E, d MMM yyyy HH:mm:ss Z
2018-12-27T09:59:19+0000
định dạng = yyyy-MM-dd'T'HH:mm:ssZ
27.12.18
định dạng = dd.MM.yy
09:59:19.815
định dạng = HH:mm:ss.SSS
Swift: iOS
if we have string, convert it to NSDate,
var dataString = profileValue["dob"] as String
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy"
// convert string into date
let dateValue:NSDate? = dateFormatter.dateFromString(dataString)
if you have and date picker parse date like this
// to avoid any nil value
if let isDate = dateValue {
self.datePicker.date = isDate
}
Bạn có thể thử mã nhanh chóng này
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd/MM/yyyy"//same as strDate date formator
dateFormatter.timeZone = TimeZone(abbreviation: "GMT+0:00")//Must used if you get one day less in conversion
let convertedDateObject = dateFormatter.date(from: strDate)
Chuyển đổi 5 , Xcode 11.0
Vượt qua (ngày trong chuỗi) của bạn ở định dạng "dateString" và ở định dạng "dateFormat" mà bạn muốn. Để chọn định dạng, sử dụng trang web NDateFormatter .
func getDateFrom(dateString: String, dateFormat: String) -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = dateFormat
dateFormatter.locale = Locale(identifier: "en_US")
guard let date = dateFormatter.date(from: dateString) else {return nil}
return date
}
import Foundation
let now : String = "2014-07-16 03:03:34 PDT"
var date : NSDate
var dateFormatter : NSDateFormatter
date = dateFormatter.dateFromString(now)
date // $R6: __NSDate = 2014-07-16 03:03:34 PDT