NSDate 개체에서 UTC 시간 및 현지 시간 가져 오기
objective-c에서 다음 코드는 date
API를 사용하여 UTC 날짜 시간 정보를 생성합니다 .
NSDate *currentUTCDate = [NSDate date]
그러나 Swift에서는
let date = NSDate.date()
결과는 현지 날짜와 시간입니다.
두 가지 질문이 있습니다.
- 객체
date
에서 UTC 시간과 현지 시간을 어떻게 얻을 수 있습니까NSDate
? NSDate
객체 에서 몇 초 동안 정밀도를 얻으려면 어떻게해야합니까 ?
편집 1 : 모든 입력에 감사하지만 NSDateFormatter
객체 또는 문자열 값을 찾고 있지 않습니다 . 나는 단순히 NSDate 객체를 찾고 있습니다 (하지만 우리가 그것들을 요리하지만 그것이 요구 사항입니다).
포인트 1을 참조하십시오.
설명서에 따르면 date
메서드는 사용되는 언어에 관계없이 현재 날짜와 시간으로 설정된 새 날짜를 반환합니다.
문제는 아마도 NSDateFormatter
. NSDate
타임 라인의 한 지점 일뿐입니다. 에 대해 말할 때 시간대가 없습니다 NSDate
. 테스트를했습니다.
빠른
print(NSDate())
산출: 2014-07-23 17:56:45 +0000
목표 -C
NSLog(@"%@", [NSDate date]);
산출: 2014-07-23 17:58:15 +0000
결과- 차이가 없습니다.
NSDate
시간대가없는 특정 시점입니다 . 참조 날짜 이후 경과 된 시간 (초)으로 생각하십시오. 특정 기준 날짜 이후 한 시간대와 다른 시간대에서 몇 초가 지났습니까? 대답은 동일합니다.
해당 날짜 를 출력 하는 방법 (디버거보기 포함)에 따라 다른 시간대에서 답변을 얻을 수 있습니다.
같은 순간에 실행 되었다면 이들 값은 동일합니다. 둘 다 참조 날짜 이후의 시간 (초)이며 출력 시 UTC 또는 현지 시간 으로 형식화 될 수 있습니다 . 날짜 변수 내에서 둘 다 UTC입니다.
목표 -C :
NSDate *UTCDate = [NSDate date]
빠른:
let UTCDate = NSDate.date()
이를 설명하기 위해 플레이 그라운드에서 NSDateFormatter를 사용할 수 있습니다.
import UIKit
let date = NSDate.date()
// "Jul 23, 2014, 11:01 AM" <-- looks local without seconds. But:
var formatter = NSDateFormatter()
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
let defaultTimeZoneStr = formatter.stringFromDate(date)
// "2014-07-23 11:01:35 -0700" <-- same date, local, but with seconds
formatter.timeZone = NSTimeZone(abbreviation: "UTC")
let utcTimeZoneStr = formatter.stringFromDate(date)
// "2014-07-23 18:01:41 +0000" <-- same date, now in UTC
날짜 출력은 다양하지만 날짜는 일정합니다. 이것이 바로 당신이 말하는 것입니다. 로컬 NSDate와 같은 것은 없습니다.
마이크로 초를 얻는 방법에 관해서는 다음을 사용할 수 있습니다 (동일한 플레이 그라운드의 하단에 두십시오).
let seconds = date.timeIntervalSince1970
let microseconds = Int(seconds * 1000) % 1000 // chops off seconds
두 날짜를 비교하려면 date.compare(otherDate)
.
Xcode 9 • Swift 4 (Swift 3.x에서도 작동)
extension Formatter {
// create static date formatters for your date representations
static let preciseLocalTime: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "HH:mm:ss.SSS"
return formatter
}()
static let preciseGMTTime: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.timeZone = TimeZone(secondsFromGMT: 0)
formatter.dateFormat = "HH:mm:ss.SSS"
return formatter
}()
}
extension Date {
// you can create a read-only computed property to return just the nanoseconds from your date time
var nanosecond: Int { return Calendar.current.component(.nanosecond, from: self) }
// the same for your local time
var preciseLocalTime: String {
return Formatter.preciseLocalTime.string(for: self) ?? ""
}
// or GMT time
var preciseGMTTime: String {
return Formatter.preciseGMTTime.string(for: self) ?? ""
}
}
놀이터 테스트
Date().preciseLocalTime // "09:13:17.385" GMT-3
Date().preciseGMTTime // "12:13:17.386" GMT
Date().nanosecond // 386268973
날짜 형식을 지정하는데도 도움이 될 수 있습니다.
날짜는 시간대와 무관하므로 Dateformatter를 사용하고 표시 할 시간대를 첨부합니다.
빠른:
let date = NSDate()
let dateFormatter = NSDateFormatter()
let timeZone = NSTimeZone(name: "UTC")
dateFormatter.timeZone = timeZone
println(dateFormatter.stringFromDate(date))
objC :
NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeZone:timeZone];
NSLog(@"%@", [dateFormatter stringFromDate:date]);
let date = Date()
print(date) // printed date is UTC
당신이 사용하는 경우 놀이터 , 시간을 확인하기 위해 인쇄 문을 사용합니다. Playground는 인쇄 할 때까지 현지 시간을 표시합니다. 놀이터의 오른쪽 패널에 의존하지 마십시오.
이 코드는 UTC로 날짜를 제공합니다. 현지 시간이 필요하면 시간대를 다음과 같이 내선으로 호출해야합니다.Timezone.current
extension Date {
var currentUTCTimeZoneDate: String {
let formatter = DateFormatter()
formatter.timeZone = TimeZone(identifier: "UTC")
formatter.amSymbol = "AM"
formatter.pmSymbol = "PM"
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
return formatter.string(from: self)
}
}
UTC 시간의 경우 다음과 같이 사용하십시오. Date().currentUTCTimeZoneDate
현재 (Swift에 대한 최신 변경 사항으로) NSDate.date()
더 이상 사용할 수 없습니다.
대신 초기화 NSDate
하면 현재 날짜와 시간을 가져옵니다.
그것을 시도하려면 놀이터에서 :
var d = NSDate()
d
그리고 당신은 얻을 것입니다 :
Oct 22, 2014, 12:20 PM"
스위프트 3
UTC에서 현재 시간대를 기반으로 날짜를 얻을 수 있습니다.
extension Date {
func currentTimeZoneDate() -> String {
let dtf = DateFormatter()
dtf.timeZone = TimeZone.current
dtf.dateFormat = "yyyy-MM-dd HH:mm:ss"
return dtf.string(from: self)
}
}
다음과 같이 전화하십시오.
Date().currentTimeZoneDate()
My Xcode 버전 6.1.1 (6A2008a)
놀이터에서 다음과 같이 테스트하십시오.
// I'm in East Timezone 8
let x = NSDate() //Output:"Dec 29, 2014, 11:37 AM"
let y = NSDate.init() //Output:"Dec 29, 2014, 11:37 AM"
println(x) //Output:"2014-12-29 03:37:24 +0000"
// seconds since 2001
x.hash //Output:441,517,044
x.hashValue //Output:441,517,044
x.timeIntervalSinceReferenceDate //Output:441,517,044.875367
// seconds since 1970
x.timeIntervalSince1970 //Output:1,419,824,244.87537
Swift4에서 UTC를 얻는 더 쉬운 방법을 찾았습니다. 이 코드를 플레이 그라운드에 넣기
let date = Date()
*//"Mar 15, 2018 at 4:01 PM"*
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
let newDate = dateFormatter.string(from: date)
*//"2018-03-15 21:05:04 +0000"*
다른 답변 외에도 Date 클래스에 대한 확장을 작성하여 특정 TimeZone에서 형식화 된 데이터를 가져와 나중에 사용하기위한 유틸리티 함수로 만들 수 있습니다. 처럼
extension Date {
func dateInTimeZone(timeZoneIdentifier: String, dateFormat: String) -> String {
let dtf = DateFormatter()
dtf.timeZone = TimeZone(identifier: timeZoneIdentifier)
dtf.dateFormat = dateFormat
return dtf.string(from: self)
}
}
이제 다음과 같이 부를 수 있습니다.
Date().dateInTimeZone(timeZoneIdentifier: "UTC", dateFormat: "yyyy-MM-dd HH:mm:ss");
참고 URL : https://stackoverflow.com/questions/24917483/get-utc-time-and-local-time-from-nsdate-object
'program story' 카테고리의 다른 글
BOOL에서 NSString으로 (0) | 2020.12.06 |
---|---|
백그라운드 / 분리 된 SSH 세션을 어떻게 종료합니까? (0) | 2020.12.06 |
Swift는 프로그래밍 방식으로 다른 뷰 컨트롤러 / 장면으로 이동합니다. (0) | 2020.12.06 |
JavaScript에서 JSON 찾기 (0) | 2020.12.06 |
내 Mac에서 Python easy_install이 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.06 |