【问题标题】:Issue in conversion time to date迄今为止的转换时间问题
【发布时间】:2014-02-18 11:23:24
【问题描述】:

我在“17-02-2014 05:00 PM”有时间,现在我想在 17-02-2014 05:00:00 +000 转换它。我正在使用代码。 在这个日期 = 17-02-2014 和时间 = 05:00 PM

-(NSDate*)dateFromDate:(NSString*)date andTime:(NSString*)time{
    NSString *eventDttm = [[NSString alloc] init];
    eventDttm = [NSString stringWithFormat:@"%@ %@",date,time];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    NSLocale *local = [NSLocale currentLocale];
    [dateFormatter setLocale:local];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm a"];

    //conversion of NSString to NSDate

    NSDate *dateFromString = [[NSDate alloc] init];
    dateFromString = [dateFormatter dateFromString:eventDttm];

    return dateFromString;
}

使用此代码我得到 17-02-2014 11:00:00 +000

【问题讨论】:

标签: ios iphone objective-c nsdateformatter


【解决方案1】:

您可以使用此代码

NSString *str=@"17-02-2014 05:00 PM";
NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
[dateFormatter setDateFormat:@"dd-MM-yyyy HH:mm a"];
NSDate *datetoday=[dateFormatter dateFromString:str];
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss Z"];
NSString *strdate=[dateFormatter stringFromDate:datetoday];
 NSLog(@"%@",strdate);

【讨论】:

  • 但这肯定仍然存在问题,您使用 24 小时 HH 日期格式字符串以 12 小时制读取,对吧?
【解决方案2】:

我认为您的问题是日期格式字符串中的"HH""HH" 是 24 小时制,但您的输入是 12 小时制。尝试使用"hh"

见:http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns

顺便说一句,在您的代码中有几个点,您正在创建一个新对象并立即将其丢弃:

NSString *eventDttm = [[NSString alloc] init];

- 创建新的 NSString 对象并分配给 eventDttm。

eventDttm = [NSString stringWithFormat:@"%@ %@",date,time];

- 创建另一个新的 NSString 对象并将 that 分配给 eventDttm。上一行创建的字符串现在不再被引用,因此将在 ARC 中销毁,或者在手动内存管理中废弃。

当你声明 dateFromString 时也会发生同样的事情。

【讨论】:

    【解决方案3】:

    将时间格式字符串从 HH 更改为 hh。 当您有 24 小时时间时,您会使用 HH。在您的示例中,您只有 12 小时的时间。

    【讨论】:

      【解决方案4】:

      用下面的代码替换您的代码...我在 xcode 中进行了测试,它给出了您想要的结果 您将在“prettyDate”字符串中获得结果。

         NSString *eventDttm = [[NSString alloc] init];
      eventDttm = [NSString stringWithFormat:@"17-02-2014 05:00 PM"];
      
      NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
      [dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm a"];
      
      
      
      NSDate *dateFromString = [[NSDate alloc] init];
      dateFromString = [dateFormatter dateFromString:eventDttm];
      [dateFormatter setDateStyle:NSDateFormatterShortStyle];
      [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
      [dateFormatter setDateFormat:@"dd-MM-yyyy hh:mm:ss a"];
      NSString *prettyDate = [dateFormatter stringFromDate:dateFromString];
      prettyDate = [prettyDate stringByAppendingString:@" +000"];
      

      让我知道它是否有效!!!

      编码愉快...!!!

      【讨论】:

      • 我的声望只有 6,应该是 15 才能投票.. :( 抱歉
      • 希望你达到15分后能加分。
      【解决方案5】:

      请使用此代码,

      NSString *dateStr = @"17-02-2014 05:00 PM";  
      NSDateFormatter *dateFormatter1 = [[NSDateFormatter alloc] init];  
      [dateFormatter1 setDateFormat:@"dd-MM-yyyy hh:mm a"];
      
      NSDate *date = [dateFormatter1 dateFromString:dateStr];  
      NSDateFormatter *dateFormatter2 = [[NSDateFormatter alloc] init];  
      [dateFormatter2 setDateFormat:@"dd-MM-yyyy hh:mm:ssZZ"];
      
      dateStr = [dateFormatter2 stringFromDate:date];
       NSLog(@"date : %@",dateStr);
      

      使用此代码,您将获得字符串, 日期:17-02-2014 05:00:00+0530 谢谢。

      【讨论】:

        猜你喜欢
        • 2019-09-09
        • 1970-01-01
        • 1970-01-01
        • 2020-07-02
        • 2018-08-01
        • 2014-07-04
        • 1970-01-01
        • 1970-01-01
        • 2014-09-13
        相关资源
        最近更新 更多