3

如何根据我的时区从日期时间字符串中获取时间。我的时区时间是格林威治标准时间 +5:30。日期时间看起来像 -

04/03/2013 3:30:00 AM

我想要这样的输出 -

9:00:00 AM

提前致谢。

4

4 回答 4

6

您需要两个日期格式化程序。

一种将字符串转换为日期。然后将日期转换为字符串以获得所需的时间格式。

NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
NSDate *date=[dateFormatter dateFromString:@"04/03/2013 3:30:00 AM"];

NSDateFormatter *dfTime = [NSDateFormatter new];
[dfTime setDateFormat:@"hh:mm:ss a"];
NSString *time=[dfTime stringFromDate:date];

*未编译和检查

于 2013-03-06T04:44:23.307 回答
5

如果字符串中有日期和时间,即 GMT 日期时间,则需要在字符串中添加 GMT。通过这个,您可以获得您所在时区的实际时间 -

NSString *dateStr = @"04/03/2013 3:30:00 AM GMT";

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a ZZZ"];

    NSDate *date = [dateFormatter dateFromString:dateStr];

    [dateFormatter setDateFormat:@"hh:mm:ss a"];

    NSString *opDateStr = [dateFormatter stringFromDate:date];

    NSLog(@"op = %@",opDateStr);
于 2013-03-06T04:47:52.560 回答
2
NSString *strdate= @"04/03/2013 3:30:00 AM";
NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
NSDate *date=[dateFormatter dateFromString:strdate];

NSDateFormatter *dfTime = [NSDateFormatter new];
[dfTime setDateFormat:@"hh:mm:ss a"];
NSString *time=[dfTime stringFromDate:date];
NSLog(@"%@",time);
于 2013-03-06T04:50:21.763 回答
2
NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
[formatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
NSLog(@"%@",[formatter stringFromDate:[NSDate date]]);

输出 06/03/2013 10:41:18 AM

[formatter setDateFormat:@"hh:mm:ss a"];
 NSLog(@"%@",[formatter stringFromDate:[NSDate date]]);

上午 10:41:18输出

而不是 [NSDate date] 传递需要格式化的日期。

由于您想要根据当前时区提供的时间字符串中的时间,您需要执行以下操作

NSDateFormatter *dateFormatter=[NSDateFormatter new];
[dateFormatter setDateFormat:@"MM/dd/yyyy hh:mm:ss a zzz"];
NSDate *date=[dateFormatter dateFromString:@"04/03/2013 3:30:00 AM 0000"];

NSDateFormatter *dfTime = [NSDateFormatter new];
[dfTime setTimeZone:[NSTimeZone systemTimeZone]];
[dfTime setDateFormat:@"hh:mm:ss a"];
NSString *time=[dfTime stringFromDate:date];
NSLog(@"%@",time);

除非存在 0000 的偏移量,否则您不会得到真正的输出。(它的 GMT 偏移量)。此外,如果 dateString 的格式及其格式化程序不同,时间格式化程序也不会完美工作。所以你需要做 MM/dd/yyyy hh:mm:ss 一个 zzz,zzz 是偏移量。现在您的输出将是09:00:00 AM

于 2013-03-06T05:14:06.897 回答