Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/100.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将NSString(如“2300”)转换为NSDate(iOS)_Ios_Objective C_Nsdate_Nsdateformatter - Fatal编程技术网

将NSString(如“2300”)转换为NSDate(iOS)

将NSString(如“2300”)转换为NSDate(iOS),ios,objective-c,nsdate,nsdateformatter,Ios,Objective C,Nsdate,Nsdateformatter,我正在尝试将NSString这样的“2300”格式转换为NSDate格式。(注意:23后面没有冒号) 我从外部web服务获取字符串。我需要在我的应用程序中以12小时格式显示这一次 谢谢:)如果我没弄错你的问题,2300实际上是23:00,即晚上11点。 因此,首先需要从字符串中获取日期,对于获取的数据,我唯一能想到的方法是使用Substring - (NSDate*) getDateFromweb:(NSString *)dateString { NSDateFormat

我正在尝试将
NSString
这样的“2300”格式转换为
NSDate
格式。(注意:23后面没有冒号)

我从外部web服务获取字符串。我需要在我的应用程序中以12小时格式显示这一次


谢谢:)

如果我没弄错你的问题,2300实际上是23:00,即晚上11点。 因此,首先需要从字符串中获取日期,对于获取的数据,我唯一能想到的方法是使用
Substring

- (NSDate*) getDateFromweb:(NSString *)dateString
{        
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeZone:[NSTimeZone systemTimeZone]];
    [dateFormatter setLocale:[NSLocale systemLocale]];
    [dateFormatter setDateFormat:@"HHmm"];
    NSDate *date = [dateFormatter dateFromString:dateString];

    [dateFormatter setDateFormat:@"hh:mm a"];
    NSString *pmAm = [dateFormatter stringFromDate:date];

    return pmAm;
}
根据abizern的建议添加了系统区域设置和时区。
这也不会假设datestring有4位数字,我在这里添加了三种类型,您需要选择哪种类型

类型-1

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HHmm"];
[formatter setTimeZone:[NSTimeZone systemTimeZone]];
[formatter setLocale:[NSLocale systemLocale]];
 NSDate *date = [formatter dateFromString:@"2300"];
  [formatter setDateFormat:@"hh:mm"];
NSString *finalDate = [formatter stringFromDate:date];
NSLog(@"finalDate==%@",finalDate);
类型-2

NSDateFormatter *formatter1 = [[NSDateFormatter alloc] init];
[formatter1 setDateFormat:@"HHmm"];
[formatter1 setTimeZone:[NSTimeZone systemTimeZone]];
[formatter1 setLocale:[NSLocale systemLocale]];
NSDate *date1 = [formatter1 dateFromString:@"2300"];
[formatter1 setDateFormat:@"hhmm"];
NSString *finalDate1 = [formatter1 stringFromDate:date1];
NSLog(@"finalDate1==%@",finalDate1);
类型-3

NSDateFormatter *formatter2 = [[NSDateFormatter alloc] init];
[formatter2 setDateFormat:@"HHmm"];
[formatter2 setTimeZone:[NSTimeZone systemTimeZone]];
[formatter2 setLocale:[NSLocale systemLocale]];
NSDate *date2 = [formatter1 dateFromString:@"2300"];
[formatter2 setDateFormat:@"hh:mm a"];
NSString *finalDate2 = [formatter2 stringFromDate:date2];
NSLog(@"finalDate2==%@",finalDate2);
您可以得到如下输出


“2300”可以是任何东西。你是说这是一个24小时格式(hhmm)的时间,你想把它转换成一个NSDate,然后转换成12小时格式的时间字符串吗?是的.“2300”是一个24小时格式的时间你得到的是这种类型的格式:11:00 PM?你需要什么输出如果我从web服务得到的字符串是“2100”,那么我需要输出像这样的“9:00 PM”这假定格式始终为4位数字。另外,您没有考虑时区或地区。@Abizern请不要期望答案通过100%的测试用例。它只是一个sudo代码来获得解决方案。它可以根据使用情况进行优化。为什么不使用“HHmm”而不是“HH:mm”?答案的要点是要全面。你错过了一些显而易见的事情。数据和时间编程很难,如果你不小心,你可能会引入一些微妙的错误,这些错误需要花费大量时间来纠正。好的,我会努力改进我的回答你得到解决方案了吗@abbinvaghese-welcomeGood,完整的答案(投票),尽管如果您提供指导而不是完整的代码通常会更好。(提供完整的代码会导致复制/粘贴编程,而不是真正的学习。)@duncac-tanx很多我的兄弟