iOS 时间和时间戳使用

转载自: https://www.jianshu.com/p/43d2b343d7f4

一、获取当前时间

//获取当前时间
- (NSString *)currentDateStr{
    NSDate *currentDate = [NSDate date];//获取当前时间,日期
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 创建一个时间格式化对象
    [dateFormatter setDateFormat:@"YYYY/MM/dd hh:mm:ss SS "];//设定时间格式,这里可以设置成自己需要的格式
    NSString *dateString = [dateFormatter stringFromDate:currentDate];//将时间转化成字符串
    return dateString;
}

二、获取当前时间戳

//获取当前时间戳
- (NSString *)currentTimeStr{
    NSDate* date = [NSDate dateWithTimeIntervalSinceNow:0];//获取当前时间0秒后的时间
    NSTimeInterval time=[date timeIntervalSince1970]*1000;// *1000 是精确到毫秒,不乘就是精确到秒
    NSString *timeString = [NSString stringWithFormat:@"%.0f", time];
    return timeString;
}

三、时间戳转时间

// 时间戳转时间,时间戳为13位是精确到毫秒的,10位精确到秒
- (NSString *)getDateStringWithTimeStr:(NSString *)str{
    NSTimeInterval time=[str doubleValue]/1000;//传入的时间戳str如果是精确到毫秒的记得要/1000
    NSDate *detailDate=[NSDate dateWithTimeIntervalSince1970:time];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; //实例化一个NSDateFormatter对象
    //设定时间格式,这里可以设置成自己需要的格式
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss SS"];
    NSString *currentDateStr = [dateFormatter stringFromDate: detailDate];
    return currentDateStr;
}

四、字符串转时间戳

//字符串转时间戳 如:2017-4-10 17:15:10
- (NSString *)getTimeStrWithString:(NSString *)str{
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];// 创建一个时间格式化对象
    [dateFormatter setDateFormat:@"YYYY-MM-dd HH:mm:ss"]; //设定时间的格式
    NSDate *tempDate = [dateFormatter dateFromString:str];//将字符串转换为时间对象
    NSString *timeStr = [NSString stringWithFormat:@"%ld", (long)[tempDate timeIntervalSince1970]*1000];//字符串转成时间戳,精确到毫秒*1000
    return timeStr;
}



作者:尼古拉斯超仔
链接:https://www.jianshu.com/p/43d2b343d7f4
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

<think>嗯,用户的问题是关于如何在iOS中将时间字符串转换为Unix时间戳使用Swift或Objective-C。首先,我需要回忆一下iOS中处理日期时间的方法。记得在Objective-C中,主要使用NSDate、NSDateFormatter这些类,而在Swift中则是DateDateFormatter。 用户提到了时间字符串转换为时间戳,所以关键步骤应该是解析字符串为日期对象,然后获取该日期的时间戳时间戳通常是自1970年1月1日以来的秒数或毫秒数,但Unix时间戳一般指的是秒数。 首先,用户可能需要使用NSDateFormatter或DateFormatter来将字符串转换为日期对象。这里需要注意设置正确的日期格式时区,否则解析可能会出错。例如,如果时间字符串是"2023-10-05 14:30:00",对应的格式应该是"yyyy-MM-dd HH:mm:ss"。时区方面,可能需要设置为UTC或者系统当前的时区,视具体情况而定。 然后,转换得到的NSDate或Date对象,可以通过timeIntervalSince1970方法获取时间戳。不过要确认是否需要秒还是毫秒,如果是毫秒的话需要乘以1000。用户的问题里提到Unix时间戳,通常是指秒级的,所以可能不需要转换。 接下来需要分别给出SwiftObjective-C的示例代码。在Swift中,使用DateFormatter,设置dateFormat可能的时区,然后调用date(from:)方法解析字符串,再使用timeIntervalSince1970获取时间戳。Objective-C部分类似,使用NSDateFormatter,设置相应的属性,解析得到NSDate后同样获取时间戳。 还需要考虑可能的错误处理,比如日期字符串格式不匹配的情况,这时候解析会返回nil,需要处理可选值。另外,时区的设置是否正确也很重要,如果时间字符串是UTC时间,应该将formatter的时区设置为UTC,否则可能导致转换错误。 用户提供的参考引用里有一个Objective-C方法,dateFromUnixTimestamp:,看起来是从时间戳生成NSDate,但用户的问题相反,所以可能需要反向操作。确保示例代码正确无误,语法正确。 最后,生成相关问题的时候,可以围绕日期格式、时区处理、时间戳的精度、不同编程语言实现等方向来提问。比如如何处理不同日期格式,时区的影响,或者如何在SwiftObjective-C之间进行转换比较等等。 总结一下,回答的结构应该是先介绍使用DateFormatter/NSDateFormatter解析字符串为日期对象,然后获取时间戳,分别给出两种语言的代码示例,并提醒注意日期格式时区的设置。最后生成相关问题,帮助用户深入理解。</think>在iOS中将时间字符串转换为Unix时间戳需要以下步骤: ### 一、Swift实现 ```swift func stringToTimestamp(dateString: String, format: String) -> TimeInterval? { let formatter = DateFormatter() formatter.dateFormat = format // 设置日期格式,如"yyyy-MM-dd HH:mm:ss" formatter.timeZone = TimeZone(abbreviation: "UTC") // 根据需求设置时区 guard let date = formatter.date(from: dateString) else { return nil } return date.timeIntervalSince1970 // 转换为秒级时间戳 } ``` ### 二、Objective-C实现 ```objective-c - (NSTimeInterval)timestampFromString:(NSString *)dateString format:(NSString *)format { NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:format]; // 设置日期格式 [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; // 设置时区 NSDate *date = [formatter dateFromString:dateString]; return [date timeIntervalSince1970]; // 返回秒级时间戳 } ``` ### 关键要点: 1. **日期格式匹配**:`dateFormat`必须与输入字符串完全匹配(如`@"yyyy-MM-dd'T'HH:mm:ssZ"`对应ISO8601格式) 2. **时区处理**:默认使用系统时区,建议根据数据源指定时区 3. **时间戳类型**:`timeIntervalSince1970`返回双精度浮点数,包含小数秒[^1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值