将字符串转换为 Objective-C 中的日期
Convert String to Date in Objective-C
如何将 Objective C 中的字符串转换为日期。
我已经尝试了以下但没有弄明白。
NSString *str = @"3/2/2018 11:44:32 AM";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/d/yyyy h:mm:ss a"];
NSDate *resultDate = [[NSDate alloc] init];
resultDate = [df dateFromString:str];
NSLog(@"result date: %@", resultDate);
result date: 2018-03-02 06:14:32 +0000 ,but i need to get it as
result date: 3/2/2018 11:44:32 AM
您正确地将字符串解析为 Date
对象。它由 print
表示的方式是因为默认情况下如果打印一个对象,它的 description
被打印。在 Date
的情况下,它将始终是您获得的格式。但是日期是正确的。
如果你想让它以以前的方式呈现,再次使用相同的 dateFormatter
并将日期格式化为字符串:
NSLog(@"result date: %@", [df stringFromDate:resultDate]);
更新
如果问题出在时差,那是因为使用 DateFormatter
进行解析时将使用您当前的时区。要克服这个问题,请明确设置日期格式化程序的时区和区域设置,请参阅此示例(swift 版本,但您只需要在 dateFormatter 上设置 timeZone
和 locale
的这两行):
let dateString = "3/2/2018 11:44:32 AM"
let df = DateFormatter()
df.dateFormat = "MM/d/yyyy h:mm:ss a"
// set the timezone and locale of the dateformatter:
df.timeZone = TimeZone(identifier: "GMT")
df.locale = Locale(identifier: "en_US_POSIX")
let date = df.date(from: dateString)
// now it will print as you expect:
print(date)
您的问题与您的应用当前语言环境有关,如果您当前的语言环境是 "en_US" 那么您的 NSLog(@"result date: %@", resultDate);
行将打印
result date: Fri Mar 2 11:44:32 2018
也许,这段代码会对你有所帮助,再次将其转换为 Nsstring 的日期,检查一下这段代码
-(void)DateChange
{
NSString *Input_Date =@"3/22/2018 11:44:32 AM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];
NSDate * Format_date = [dateFormatter dateFromString:Input_Date];
[dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];
NSString *Change_date = [dateFormatter stringFromDate:Format_date];
NSLog(@"Final Change Date :- %@",Change_date);
}
My Output is :-
Final Change Date :- 3/22/2018 11:44:32 AM
如何将 Objective C 中的字符串转换为日期。
我已经尝试了以下但没有弄明白。
NSString *str = @"3/2/2018 11:44:32 AM";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/d/yyyy h:mm:ss a"];
NSDate *resultDate = [[NSDate alloc] init];
resultDate = [df dateFromString:str];
NSLog(@"result date: %@", resultDate);
result date: 2018-03-02 06:14:32 +0000 ,but i need to get it as
result date: 3/2/2018 11:44:32 AM
您正确地将字符串解析为 Date
对象。它由 print
表示的方式是因为默认情况下如果打印一个对象,它的 description
被打印。在 Date
的情况下,它将始终是您获得的格式。但是日期是正确的。
如果你想让它以以前的方式呈现,再次使用相同的 dateFormatter
并将日期格式化为字符串:
NSLog(@"result date: %@", [df stringFromDate:resultDate]);
更新
如果问题出在时差,那是因为使用 DateFormatter
进行解析时将使用您当前的时区。要克服这个问题,请明确设置日期格式化程序的时区和区域设置,请参阅此示例(swift 版本,但您只需要在 dateFormatter 上设置 timeZone
和 locale
的这两行):
let dateString = "3/2/2018 11:44:32 AM"
let df = DateFormatter()
df.dateFormat = "MM/d/yyyy h:mm:ss a"
// set the timezone and locale of the dateformatter:
df.timeZone = TimeZone(identifier: "GMT")
df.locale = Locale(identifier: "en_US_POSIX")
let date = df.date(from: dateString)
// now it will print as you expect:
print(date)
您的问题与您的应用当前语言环境有关,如果您当前的语言环境是 "en_US" 那么您的 NSLog(@"result date: %@", resultDate);
行将打印
result date: Fri Mar 2 11:44:32 2018
也许,这段代码会对你有所帮助,再次将其转换为 Nsstring 的日期,检查一下这段代码
-(void)DateChange
{
NSString *Input_Date =@"3/22/2018 11:44:32 AM";
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];
NSDate * Format_date = [dateFormatter dateFromString:Input_Date];
[dateFormatter setDateFormat:@"M/d/yyyy hh:mm:ss a"];
NSString *Change_date = [dateFormatter stringFromDate:Format_date];
NSLog(@"Final Change Date :- %@",Change_date);
}
My Output is :-
Final Change Date :- 3/22/2018 11:44:32 AM