我如何将一个NSString像“01/02/10”(意思是2010年2月1日)转换成一个NSDate?如何将NSDate转换回字符串?
当前回答
最好的做法是建立一个通用类,你把你所有的通用方法,在几乎所有项目中都有用的方法,并在那里添加@Pavan建议的代码:
+ (NSDate *)getDateOutOfString:(NSString *)passedString andDateFormat:(NSString *)dateFormat{
NSString *dateString = passedString;
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:dateFormat];
NSDate *dateFromString = [[NSDate alloc] init];
dateFromString = [dateFormatter dateFromString:dateString];
return dateFromString;
}
. .所有其他有用的方法都是如此
通过这样做,你开始为你的应用程序构建一个干净的可重用代码。 干杯!
其他回答
Swift 4及后续版本
更新:2018
字符串到日期
var dateString = "02-03-2017"
var dateFormatter = DateFormatter()
// This is important - we set our input date format to match our input string
// if the format doesn't match you'll get nil from your string, so be careful
dateFormatter.dateFormat = "dd-MM-yyyy"
//`date(from:)` returns an optional so make sure you unwrap when using.
var dateFromString: Date? = dateFormatter.date(from: dateString)
日期到字符串
var formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy"
guard let unwrappedDate = dateFromString else { return }
//Using the dateFromString variable from before.
let stringDate: String = formatter.string(from: dateFromString)
斯威夫特3
更新:2017年7月20日
NSDate的字符串
var dateString = "02-03-2017"
var dateFormatter = DateFormatter()
// This is important - we set our input date format to match our input string
// if the format doesn't match you'll get nil from your string, so be careful
dateFormatter.dateFormat = "dd-MM-yyyy"
var dateFromString = dateFormatter.date(from: dateString)
NSDate到字符串
var formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy"
let stringDate: String = formatter.string(from: dateFromString)
斯威夫特
更新:2015年10月22日
NSDate的字符串
var dateString = "01-02-2010"
var dateFormatter = NSDateFormatter()
// this is imporant - we set our input date format to match our input string
dateFormatter.dateFormat = "dd-MM-yyyy"
// voila!
var dateFromString = dateFormatter.dateFromString(dateString)
NSDate到字符串
var formatter = NSDateFormatter()
formatter.dateFormat = "dd-MM-yyyy"
let stringDate: String = formatter.stringFromDate(NSDate())
println(stringDate)
objective - c
和陌生人约会
NSString *dateString = @"01-02-2010";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSDate *dateFromString = [dateFormatter dateFromString:dateString];
首次约会:
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"dd-MM-yyyy"];
NSString *stringDate = [dateFormatter stringFromDate:[NSDate date]];
NSLog(@"%@", stringDate);
当使用固定格式的日期时,需要将日期格式化程序的区域设置为“en_US_POSIX”。
摘自数据格式化指南
If you're working with fixed-format dates, you should first set the locale of the date formatter to something appropriate for your fixed format. In most cases the best locale to choose is en_US_POSIX, a locale that's specifically designed to yield US English results regardless of both user and system preferences. en_US_POSIX is also invariant in time (if the US, at some point in the future, changes the way it formats dates, en_US will change to reflect the new behavior, but en_US_POSIX will not), and between platforms (en_US_POSIX works the same on iPhone OS as it does on OS X, and as it does on other platforms).
Swift 3或更高版本
extension Formatter {
static let customDate: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "dd/MM/yy"
return formatter
}()
static let time: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "HH:mm"
return formatter
}()
static let weekdayName: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "cccc"
return formatter
}()
static let month: DateFormatter = {
let formatter = DateFormatter()
formatter.dateFormat = "LLLL"
return formatter
}()
}
extension Date {
var customDate: String {
return Formatter.customDate.string(from: self)
}
var customTime: String {
return Formatter.time.string(from: self)
}
var weekdayName: String {
return Formatter.weekdayName.string(from: self)
}
var monthName: String {
return Formatter.month.string(from: self)
}
}
extension String {
var customDate: Date? {
return Formatter.customDate.date(from: self)
}
}
用法:
// this will be displayed like this regardless of the user and system preferences
Date().customTime // "16:50"
Date().customDate // "06/05/17"
// this will be displayed according to user and system preferences
Date().weekdayName // "Saturday"
Date().monthName // "May"
解析自定义日期并将日期转换回相同的字符串格式:
let dateString = "01/02/10"
if let date = dateString.customDate {
print(date.customDate) // "01/02/10\n"
print(date.monthName) // customDate
}
这里是你可以用来定制它的所有元素:
字符串到日期
var dateFormatter = DateFormatter()
dateFormatter.format = "dd/MM/yyyy"
var dateFromString: Date? = dateFormatter.date(from: dateString) //pass string here
日期到字符串
var dateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd-MM-yyyy"
let newDate = dateFormatter.string(from: date) //pass Date here
您可以为此使用扩展。
extension NSDate {
//NSString to NSDate
convenience
init(dateString:String) {
let nsDateFormatter = NSDateFormatter()
nsDateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
// Add the locale if required here
let dateObj = nsDateFormatter.dateFromString(dateString)
self.init(timeInterval:0, sinceDate:dateObj!)
}
//NSDate to time string
func getTime() -> String {
let timeFormatter = NSDateFormatter()
timeFormatter.dateFormat = "hh:mm"
//Can also set the default styles for date or time using .timeStyle or .dateStyle
return timeFormatter.stringFromDate(self)
}
//NSDate to date string
func getDate() -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "dd, MMM"
return dateFormatter.stringFromDate(self)
}
//NSDate to String
func getString() -> String {
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"
return dateFormatter.stringFromDate(self)
}
}
因此,在执行时,实际代码将如下所示
var dateObjFromString = NSDate(dateString: cutDateTime)
var dateString = dateObjFromString.getDate()
var timeString = dateObjFromString.getTime()
var stringFromDate = dateObjFromString.getString()
也有一些默认方法,但我猜它可能不适用于您从文档中给出的格式
-dateFromString(_:)
-stringFromDate(_:)
-localizedStringFromDate(_ date: NSDate,
dateStyle dateStyle: NSDateFormatterStyle,
timeStyle timeStyle: NSDateFormatterStyle) -> String
用“10”来表示年份是不好的,因为它可以是1910年、1810年等。你可能应该用4位数来表示。
如果你能把日期改成
yyyymmdd
然后你可以使用:
// Convert string to date object
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyyMMdd"];
NSDate *date = [dateFormat dateFromString:dateStr];
// Convert date object to desired output format
[dateFormat setDateFormat:@"EEEE MMMM d, YYYY"];
dateStr = [dateFormat stringFromDate:date];
[dateFormat release];
推荐文章
- 如何删除默认的导航栏空间在SwiftUI导航视图
- 如何在iOS中使用Swift编程segue
- Swift -整数转换为小时/分钟/秒
- Swift:声明一个空字典
- 为什么ARC仍然需要@autoreleasepool ?
- 在成功提交我的应用程序后,“太多符号文件”
- 首先添加一个UIView,甚至是导航栏
- 我如何改变UIButton标题颜色?
- 在Swift中如何调用GCD主线程上的参数方法?
- NSLayoutConstraints是可动画的吗?
- iOS -构建失败,CocoaPods无法找到头文件
- Xcode 4挂在“附加到(应用程序名称)”
- CFNetwork SSLHandshake iOS 9失败
- 请求失败:不可接受的内容类型:文本/html使用AFNetworking 2.0
- 缺少推荐的图标文件-该包不包含iPhone / iPod Touch的应用程序图标,像素为“120x120”,png格式