2017-02-27 637 views
1

我有这样的日期时间字符串。iOS将日期字符串与上午,下午到NSDate(设备设置与24小时格式)

2017年2月20日03:32下午//这次是新加坡时间。所以我需要选择新加坡时区

而我试图转换为这样的NSDate。

NSDate *redeemDate = [NSDate dateWithString:currentDateString formatString:@"dd MMM yyyy hh:mma" timeZone:[NSTimeZone timeZoneForSecondsFromGMT:8*3600]]; 

虽然我使用这个库。但是如果我手动格式化也是一样的。 https://github.com/MatthewYork/DateTools

如果设备使用12小时制格式,那没问题,但如果使用24小时格式,我得到零。我可以知道为什么吗?我想可能是因为hh我改成HH。但它也不好。

+1

你从哪里得到的字符串?该字符串总是以该格式还是基于用户的设备进行更改? –

+0

它来自我的后端。它不会根据用户的设备而改变 –

回答

1

HH:mm =>看起来像00:12,23:00 ...这有24小时格式。

hh:mm =>将看起来像01:00Am,02:00Am,... 01:00 pm这有12小时格式。

因此,如果要以其他时间/日期格式显示,则必须将其转换为适当的格式。

这里看看http://www.unicode.org/reports/tr35/tr35-19.html#Date_Format_Patterns

例子:

NSDate *date = [NSDate new]; 
NSString* format = @"dd MMM yyyy hh:mma'Z'"; 

NSDateFormatter* dateFormat = [[NSDateFormatter alloc] init]; 
NSCalendar *calendar = [NSCalendar currentCalendar]; 
calendar.timeZone = [NSTimeZone timeZoneWithName:@"SGT"]; 

[dateFormat setDateFormat:format]; 
[dateFormat setCalendar: calendar]; 

NSDate* formatDate = [dateFormat dateFromString:[dateFormat stringFromDate:date]]; 

你能试试吗?

+0

问题是我得到零。我该怎么办? –

+0

你可以用你想要的任何格式显示你的日期,我不认为它必须对设备时间格式做任何事情。 – Balanced

+0

我编辑了我的答案 – Balanced

1

您正在使用的库不好。您还需要在NSDateFormatter上设置其他参数,这些参数尚未设置并正在使用系统设置。请勿使用DateTool只需创建您自己的NSDateFormatter。除了时区和formatString之外,还必须设置日历区域设置

看到 https://developer.apple.com/library/content/qa/qa1480/_index.html

+0

谢谢。是的,我应该设置这2个值。我注意到我的设备区域设置是中文。这就是为什么我没有。 –

相关问题