【问题标题】:How to get time with date string如何使用日期字符串获取时间
【发布时间】:2013-03-06 04:35:02
【问题描述】:

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

04/03/2013 3:30:00 AM

我想要这样的输出-

9:00:00 AM

提前致谢。

【问题讨论】:

标签: objective-c datetime


【解决方案1】:

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

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

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];

*未编译检查

【讨论】:

  • 谢谢。但它的输出是凌晨 3:30:00。我怎样才能获得我所在时区的时间?
  • @shivam:NSDate 显示相对于 GMT。您不能将其设置为 IST。
  • 我在 NSDate *date=[dateFormatter dateFromString:dateTime];.... 中传递服务器日期时间。现在我想将其更改为本地时区。
  • 因为你在最后将只打印时间作为字符串。然后您可以将 5.00 添加到 time,这将使您有时间在 IST 中。您需要 IST 或其他。如果您的应用保存在本地时区设置中,则获取差异并将其添加到time
【解决方案2】:

如果字符串中有日期和时间,即 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);

【讨论】:

    【解决方案3】:
    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);
    

    【讨论】:

      【解决方案4】:
      NSDateFormatter * formatter = [[NSDateFormatter alloc]init];
      [formatter setDateFormat:@"dd/MM/yyyy hh:mm:ss a"];
      NSLog(@"%@",[formatter stringFromDate:[NSDate date]]);
      

      输出 2013 年 6 月 3 日上午 10:41:18

      [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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-13
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-05-11
        • 2014-05-09
        相关资源
        最近更新 更多