วิธีการแปลงเป็นNSDate
Unix timestamp? ฉันได้อ่านโพสต์มากมายที่ทำตรงกันข้าม แต่ฉันไม่พบสิ่งที่เกี่ยวข้องกับคำถามของฉัน
วิธีการแปลงเป็นNSDate
Unix timestamp? ฉันได้อ่านโพสต์มากมายที่ทำตรงกันข้าม แต่ฉันไม่พบสิ่งที่เกี่ยวข้องกับคำถามของฉัน
คำตอบ:
ฉันเชื่อว่านี่เป็นตัวเลือกของ NSDate ที่คุณกำลังมองหา:
- (NSTimeInterval)timeIntervalSince1970
การประทับเวลา Unixคือจำนวนวินาทีตั้งแต่ 00:00:00 UTC 1 มกราคม 1970 มันถูกแทนด้วยประเภทtime_tซึ่งโดยปกติแล้วจะเป็นชนิดจำนวนเต็ม 32 บิตที่ลงชื่อแล้ว (ยาวหรือ int)
iOS ให้- (NSTimeInterval) timeIntervalSince1970สำหรับออบเจ็กต์ NSDate ซึ่งส่งคืนจำนวนวินาทีตั้งแต่ 00:00:00 GMT 1 มกราคม 1970 NSTimeInterval เป็นประเภททศนิยมสองจุดเพื่อให้คุณได้รับวินาทีและเศษส่วนของวินาที
เนื่องจากทั้งคู่มีการอ้างอิงเดียวกัน (เที่ยงคืน 1 มกราคม 2519 UTC) และทั้งสองในไม่กี่วินาทีการแปลงนั้นง่ายแปลง NSTimeInterval ให้เป็น time_t, การปัดเศษหรือการตัดทอนขึ้นอยู่กับความต้องการของคุณ:
time_t unixTime = (time_t) [[NSDate date] timeIntervalSince1970];
int unixTime = floor([piece.piece_last_view timeIntervalSince1970])
โดยที่ piece.piece.last_view เป็น NSDate
คุณสามารถสร้างวันที่ประทับเวลา unix จากวันที่ด้วยวิธีนี้:
NSTimeInterval timestamp = [[NSDate date] timeIntervalSince1970];
- (void)GetCurrentTimeStamp
{
NSDateFormatter *objDateformat = [[NSDateFormatter alloc] init];
[objDateformat setDateFormat:@"yyyy-MM-dd"];
NSString *strTime = [objDateformat stringFromDate:[NSDate date]];
NSString *strUTCTime = [self GetUTCDateTimeFromLocalTime:strTime];//You can pass your date but be carefull about your date format of NSDateFormatter.
NSDate *objUTCDate = [objDateformat dateFromString:strUTCTime];
long long milliseconds = (long long)([objUTCDate timeIntervalSince1970] * 1000.0);
NSString *strTimeStamp = [Nsstring stringwithformat:@"%lld",milliseconds];
NSLog(@"The Timestamp is = %@",strTimestamp);
}
- (NSString *) GetUTCDateTimeFromLocalTime:(NSString *)IN_strLocalTime
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *objDate = [dateFormatter dateFromString:IN_strLocalTime];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
NSString *strDateTime = [dateFormatter stringFromDate:objDate];
return strDateTime;
}
หมายเหตุ: - การประทับเวลาจะต้องอยู่ในโซน UTC ดังนั้นฉันจึงแปลงเวลาท้องถิ่นของเราเป็นเวลา UTC
อัปเดตสำหรับ Swift 3
// current date and time
let someDate = Date()
// time interval since 1970
let myTimeStamp = someDate.timeIntervalSince1970
หมายเหตุ
timeIntervalSince1970
ผลตอบแทนที่ได้TimeInterval
ซึ่งเป็น typealias Double
สำหรับ
หากคุณต้องการไปทางอื่นคุณสามารถทำสิ่งต่อไปนี้:
let myDate = Date(timeIntervalSince1970: myTimeStamp)
หากคุณต้องการเก็บเวลาเหล่านี้ในฐานข้อมูลหรือส่งผ่านเซิร์ฟเวอร์ ... ดีที่สุดคือการใช้ Unix timestamps นี่เป็นตัวอย่างเล็กน้อยที่จะได้รับ:
+ (NSTimeInterval)getUTCFormateDate{
NSDateComponents *comps = [[NSCalendar currentCalendar]
components:NSDayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit
fromDate:[NSDate date]];
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:[[NSTimeZone systemTimeZone] secondsFromGMT]];
return [[[NSCalendar currentCalendar] dateFromComponents:comps] timeIntervalSince1970];
}
[[NSTimeZone systemTimeZone] secondsFromGMT]]
อย่างไร: โปรดอธิบายเล็กน้อย
วิธีที่ฉันชอบคือ:
NSDate.date.timeIntervalSince1970;
ตามคำแนะนำของ @ kexik โดยใช้ฟังก์ชั่นเวลา UNIX ดังต่อไปนี้:
time_t result = time(NULL);
NSLog([NSString stringWithFormat:@"The current Unix epoch time is %d",(int)result]);
ตามประสบการณ์ของฉัน - อย่าใช้เวลาช่วงเวลานับตั้งแต่ปี 1970 มันให้เวลาประทับยุค - จำนวนวินาทีที่คุณอยู่หลัง GMT
เคยมีข้อผิดพลาดกับ [[วันที่ NSDate] timeIntervalSince1970] เคยใช้เพื่อเพิ่ม / ลบเวลาตามเขตเวลาของโทรศัพท์ แต่ดูเหมือนว่าจะได้รับการแก้ไขในขณะนี้
[NSString stringWithFormat: @"first unixtime is %ld",message,(long)[[NSDate date] timeIntervalSince1970]];
[NSString stringWithFormat: @"second unixtime is %ld",message,[[NSDate date] timeIntervalSince1970]];
[NSString stringWithFormat: @"third unixtime is %.0f",message,[[NSDate date] timeIntervalSince1970]];
ครั้งแรกที่ Unixtime 1532278070
สอง unixtime 1532278070.461380
สาม unixtime 1532278070
หากคุณต้องการประทับเวลาเป็นสตริง
time_t result = time(NULL);
NSString *timeStampString = [@(result) stringValue];