Làm cách nào tôi có thể chuyển đổi chuỗi này "2016-04-14T10:44:00+0000"
thành một NSDate
và chỉ giữ năm, tháng, ngày, giờ?
Ở T
giữa của nó thực sự ném đi những gì tôi đã quen khi làm việc với ngày.
Làm cách nào tôi có thể chuyển đổi chuỗi này "2016-04-14T10:44:00+0000"
thành một NSDate
và chỉ giữ năm, tháng, ngày, giờ?
Ở T
giữa của nó thực sự ném đi những gì tôi đã quen khi làm việc với ngày.
Câu trả lời:
Chuyển đổi chuỗi ISO8601 thành ngày
let isoDate = "2016-04-14T10:44:00+0000"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX") // set locale to reliable US_POSIX
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
let date = dateFormatter.date(from:isoDate)!
Lấy các thành phần ngày cho năm, tháng, ngày và giờ kể từ ngày
let calendar = Calendar.current
let components = calendar.dateComponents([.year, .month, .day, .hour], from: date)
Cuối cùng tạo một Date
đối tượng mới và tước phút và giây
let finalDate = calendar.date(from:components)
Cũng xem xét định dạng tiện lợi được ISO8601DateFormatter
giới thiệu trong iOS 10 / macOS 12:
let isoDate = "2016-04-14T10:44:00+0000"
let dateFormatter = ISO8601DateFormatter()
let date = dateFormatter.date(from:isoDate)!
.hour
Hãy thử định dạng ngày sau.
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter. dateFromString (strDate)
Hy vọng nó giúp..
Swift 4.1:
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy'-'MM'-'dd'T'HH':'mm':'ssZZZ"
let date = dateFormatter.date(from: strDate)
Trong Swift 4.1 bạn có thể làm:
func getDate() -> Date? {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = TimeZone.current
dateFormatter.locale = Locale.current
return dateFormatter.date(from: "2015-04-01T11:42:00") // replace Date String
}
Swift 3.0 - 4.2
import Foundation
extension String {
func toDate(withFormat format: String = "yyyy-MM-dd HH:mm:ss")-> Date?{
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
dateFormatter.locale = Locale(identifier: "fa-IR")
dateFormatter.calendar = Calendar(identifier: .gregorian)
dateFormatter.dateFormat = format
let date = dateFormatter.date(from: self)
return date
}
}
extension Date {
func toString(withFormat format: String = "EEEE ، d MMMM yyyy") -> String {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "fa-IR")
dateFormatter.timeZone = TimeZone(identifier: "Asia/Tehran")
dateFormatter.calendar = Calendar(identifier: .persian)
dateFormatter.dateFormat = format
let str = dateFormatter.string(from: self)
return str
}
}
Xin chào Bạn có Định dạng T riêng biệt và sau đó chuyển đổi theo ý muốn
// create dateFormatter with UTC time format
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let date = dateFormatter.dateFromString("2015-04-01T11:42:00")
// change to a readable time format and change to local time zone
dateFormatter.dateFormat = "EEE, MMM d, yyyy - h:mm a"
dateFormatter.timeZone = NSTimeZone.localTimeZone()
let timeStamp = dateFormatter.stringFromDate(date!)
Chỉ cần bạn vượt qua dateformate
và ngày của bạn sau đó bạn nhận được Year,month,day,hour
. Thông tin thêm
func GetOnlyDateMonthYearFromFullDate(currentDateFormate:NSString , conVertFormate:NSString , convertDate:NSString ) -> NSString
{
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = currentDateFormate as String
let formatter = NSDateFormatter()
formatter.dateFormat = Key_DATE_FORMATE as String
let finalDate = formatter.dateFromString(convertDate as String)
formatter.dateFormat = conVertFormate as String
let dateString = formatter.stringFromDate(finalDate!)
return dateString
}
Nhận năm
let Year = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "YYYY", convertDate: "2016-04-14T10:44:00+0000") as String
Nhận tháng
let month = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "MM", convertDate: "2016-04-14T10:44:00+0000") as String
Nhận ngày
let day = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "dd", convertDate: "2016-04-14T10:44:00+0000") as String
Nhận giờ
let hour = self.GetOnlyDateMonthYearFromFullDate("yyyy-MM-dd'T'HH:mm:ssZ", conVertFormate: "hh", convertDate: "2016-04-14T10:44:00+0000") as String
làm cho chức năng toàn cầu
func convertDateFormat(inputDate: String) -> String {
let olDateFormatter = DateFormatter()
olDateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let oldDate = olDateFormatter.date(from: inputDate)
let convertDateFormatter = DateFormatter()
convertDateFormatter.dateFormat = "MMM dd yyyy h:mm a"
return convertDateFormatter.string(from: oldDate!)
}
Hàm được gọi và chuyển giá trị trong nó
get_OutputStr = convertDateFormat(inputDate: "2019-03-30T05:30:00+0000")
và đây là đầu ra
Feb 25 2020 4:51 PM
Trong swift4,
var Msg_Date_ = "2019-03-30T05:30:00+0000"
let dateFormatterGet = DateFormatter()
dateFormatterGet.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateFormatterPrint = DateFormatter()
dateFormatterPrint.dateFormat = "MMM dd yyyy h:mm a" //"MMM d, h:mm a" for Sep 12, 2:11 PM
let datee = dateFormatterGet.date(from: Msg_Date_)
Msg_Date_ = dateFormatterPrint.string(from: datee ?? Date())
print(Msg_Date_)
// đầu ra: - 30 tháng 3 năm 2019 05:30 PM
chỉ cần Bước 1> nhận giá trị Chuỗi từ JSON hoặc dataSource
Bước 2> tạo một biến cục bộ và gán nó.
let startDate = CurrentDashBoard.startdate
Bước 3> tạo một thể hiện của DateFormatter.
let dateFormatter = DateFormatter()
bước 4> gọi dateFormat từ dateFormatter và cung cấp dataType ngày lưu.
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss"("may be String formate")
Bước 5> Gán biến Local cho biến này để chuyển đổi.
let dateFromStringstartDate : NSDate = dateFormatter.date(from: startDate)! as NSDate
Bước 6> cung cấp ngày yêu cầu của bạn Formate theo mã sau đây.
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
Bước 6> Gán nó vào nhãn / văn bản
cell.lblStartDate.text = String(format: "%@", strstartDate)
Mã số:
let startDate = CurrentDashBoard.startdate let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "MM-dd-yyyy HH:mm:ss" let dateFromStringstartDate :
NSDate = dateFormatter.date(from: startDate)! as NSDate
dateFormatter.dateFormat = "MM/dd/yyyy HH:mm:ss"
let strstartDate = dateFormatter.string(from: dateFromStringstartDate as Date)
Swift 5. Để xem NẾU MỘT NGÀY ĐÃ THAM GIA:
let expiryDate = "2020-01-10" // Jan 10 2020
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
if Date() < dateFormatter.date(from: expiryDate) ?? Date() {
print("Not Yet expiryDate")
} else {
print("expiryDate has passed")
}
Tôi đã trở nên điên rồ với định dạng này là tốt.
Xem giải pháp dưới đây.
Chuỗi của bạn xuất phát từ lưng hoặc nguồn khác:
let isoDate = "2020-05-06 20:00:00-03"
Xác định định dạng ngày
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd' 'HH:mm:ssZ"
let date = dateFormatter.date(from:isoDate)!
Bây giờ bạn có ngày là Ngày (), bạn có thể thay đổi thành bất kỳ định dạng nào bạn muốn bằng cách sử dụng formatDate.opes
let formatDate = DateFormatter()
formatDate.dateFormat = "dd/MM/yyyy HH:mm"
let drawDate = formatDate.string(from: date)
print(drawDate)
Đầu ra:
06/05/2020 20:00
Vui lòng sử dụng thư viện phân tích cú pháp ISO8601 để làm điều này. Có quá nhiều cách để chuỗi được mã hóa. Đừng dựa vào một định dạng cụ thể và đừng dựa vào máy chủ luôn gửi giống nhau. Các vấn đề bắt đầu với 'Z' ở cuối và nó sẽ mở rộng thông qua tất cả các loại tiêu chuẩn. Một thư viện phân tích cú pháp sẽ xử lý tất cả các trường hợp và sẽ luôn cung cấp một chuyển đổi an toàn - trong khi đó một chuỗi định dạng cố định có thể sẽ thất bại trong tương lai.
Bạn có thể sử dụng một trong những thư viện này. Chúng cũng có sẵn trên CococaPods:
https://github.com/boredzo/iso-8601-date-formatter/
https://github.com/malcommac/SwiftDate
Hãy nhìn vào việc thực hiện. Cả hai đều dài vài trăm dòng - vì lý do chính đáng.
Liên quan đến câu hỏi: Bạn có thể lấy các thành phần ngày từ ngày bằng NSDateComponents. Ví dụ trên trang web bao gồm chính xác trường hợp của bạn.
https://developer.apple.com/documentation/foundation/nscalWiki/1414841-components?lingu=objc
Xin lưu ý rằng việc chuyển đổi ngày của bạn sẽ tính đến múi giờ. Bạn có thể muốn đặt 'ngôn ngữ' của NSCalWiki một cách rõ ràng.