수색…


통사론

  • NSDate () // NSDate 객체 init은 현재 날짜와 시간으로 초기화합니다.
  • NSDate (). timeIntervalSince1970 // 1970 년 1 월 1 일 00:00:00 UTC부터 현재 날짜 및 시간 (초 단위).
  • NSDate (). compare (other : NSDate) // 현재 날짜와 다른 날짜를 비교하여 반환합니다. NSComparisonResult 반환합니다 NSComparisonResult

비고

설정할 수있는 날짜 형식에는 여러 가지 유형이 있습니다. 여기에 전체 형식이 나와 있습니다.

체재 의미 / 설명 예제 1 예제 2
와이 1 자리 이상인 해. 175 서기 → "175" 2016 년 광고 → "2016"
정확하게 2 자릿수의 년. 5 광고 → "05" 2016 년 → "16"
yyy 최소 3 자리 숫자가있는 연도. 5 AD → "005" 2016 년 광고 → "2016"
yyyy 최소 4 자릿수의 연도 5 AD → "0005" 2016 년 광고 → "2016"
한 자리에 적어도 한자리가 있어야합니다. 7 월 → "7" "11 월"→ "11"
MM 최소 2 자리 숫자가있는 달. 7 월 → "07" "11 월"→ "11"
MMM 세 글자 월 약자. 7 월 → "7 월" "11 월"→ "11 월"
MMMM 월 이름. 7 월 → "7 월" "11 월"→ "11 월"
MMMMM 한 글자 달 약자 (1 월, 6 월, 7 월 모두 'J'를 가짐). 7 월 → "J" "11 월"→ "N"
적어도 하나의 숫자가있는 날. 8 → "8" 29 → "29"
DD 최소한 두 자리 숫자의 날. 8 → "08" 29 → "29"
"E", "EE"또는 "EEE" 요일 이름의 3 자간 약어. 월요일 → "월" 목요일 → "목"
EEEE 종일 이름. 월요일 → "월요일" 목요일 → "목요일"
EEEEE 요일 이름의 1 자간 약어. (Thu 및 Tue는 'T'가됩니다.) 월요일 → "M" 목요일 → "T"
EEEEEE 요일 이름의 2 자간 약어. 월요일 → "모" 목요일 → "Th"
에이 기간 (AM / PM). 오후 10시 → "PM" 2 AM → "AM"
h 최소 1 자리 숫자의 1-12 기준 시간. 오후 10시 → "10" 오전 2시 → "2"
hh 최소한 2 자리 숫자의 1-12 기준 시간. 오후 10시 → "10" 2 AM → "02"
H 0-23 시간 기준으로 1 자리 이상 오후 10시 → "14" 오전 2시 → "2"
HH 0-23 시간 기준으로 최소 2 자리 숫자. 오후 10시 → "14" 2 AM → "02"
최소 1 자리수의 분. 7 → "7" 29 → "29"
mm 적어도 2 자릿수의 분. 7 → "07" 29 → "29"
에스 최소 1 자리 숫자로 된 초. 7 → "7" 29 → "29"
SS 두 번째 자리는 2 자리 이상입니다. 7 → "07" 29 → "29"

영역 (z)을 기준으로 다른 시간을 가지거나 밀리 초 세부 정보 (S) 등을 얻기 위해 더 많은 것들이 있습니다.

현재 날짜 가져 오기

현재 날짜를 얻는 것은 매우 쉽습니다. 다음과 같이 현재 날짜의 NSDate 객체를 한 줄에 얻을 수 있습니다 :

빠른

var date = NSDate()

스위프트 3

var date = Date()

목표 -C

NSDate *date = [NSDate date];

NSDate 객체 가져 오기 N 초 현재 날짜에서

현재 날짜와 시간에서 새 날짜까지의 시간 (초)입니다. 음수 값을 사용하여 현재 날짜 이전의 날짜를 지정하십시오.

이를 위해 우리는 dateWithTimerIntervalSinceNow(seconds: NSTimeInterval) -> NSDate (Swift) 또는 + (NSDate*)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds (Objective-C)라는 메서드를 가지고 있습니다.

예를 들어, 현재 날짜와 일주일에서 현재 날짜까지 일주일이 필요할 경우, 우리는 그것을 할 수 있습니다.

빠른

let totalSecondsInWeek:NSTimeInterval = 7 * 24 * 60 * 60;
//Using negative value for previous date from today
let nextWeek = NSDate().dateWithTimerIntervalSinceNow(totalSecondsInWeek)

//Using positive value for future date from today
let lastWeek = NSDate().dateWithTimerIntervalSinceNow(-totalSecondsInWeek)

스위프트 3

let totalSecondsInWeek:TimeInterval = 7 * 24 * 60 * 60;

//Using positive value to add to the current date
let nextWeek = Date(timeIntervalSinceNow: totalSecondsInWeek)

//Using negative value to get date one week from current date
let lastWeek = Date(timeIntervalSinceNow: -totalSecondsInWeek)

목표 -C

NSTimeInterval totalSecondsInWeek = 7 * 24 * 60 * 60;
//Using negative value for previous date from today
NSDate *lastWeek = [NSDate dateWithTimeIntervalSinceNow:-totalSecondsInWeek];

//Using positive value for future date from today
NSDate *nextWeek = [NSDate dateWithTimeIntervalSinceNow:totalSecondsInWeek];

NSLog(@"Last Week: %@", lastWeek);
NSLog(@"Right Now: %@", now);
NSLog(@"Next Week: %@", nextWeek);

날짜 비교

날짜 비교에는 4 가지 방법이 있습니다.

빠른

  • isEqualToDate(anotherDate: NSDate) -> Bool
  • earlierDate(anotherDate: NSDate) -> NSDate
  • laterDate(anotherDate: NSDate) -> NSDate
  • compare(anotherDate: NSDate) -> NSComparisonResult

목표 -C

  • - (BOOL)isEqualToDate:(NSDate *)anotherDate
  • - (NSDate *)earlierDate:(NSDate *)anotherDate
  • - (NSDate *)laterDate:(NSDate *)anotherDate
  • - (NSComparisonResult)compare:(NSDate *)anotherDate

2 개의 날짜가 있다고 가정 해 봅시다.

빠른

let date1: NSDate = ... // initialized as  July 7, 2016 00:00:00
let date2: NSDate = ... // initialized as  July 2, 2016 00:00:00

목표 -C

NSDate *date1 = ... // initialized as  July 7, 2016 00:00:00
NSDate *date2 = ... // initialized as  July 2, 2016 00:00:00

그런 다음 비교하기 위해 다음 코드를 시도합니다.

빠른

if date1.isEqualToDate(date2) {
    // returns false, as both dates aren't equal
}

earlierDate: NSDate = date1.earlierDate(date2) // returns the earlier date of the two (date 2)
laterDate: NSDate = date1.laterDate(date2) // returns the later date of the two (date1)

result: NSComparisonResult = date1.compare(date2)

if result == .OrderedAscending {
    // true if date1 is earlier than date2
} else if result == .OrderedSame {
    // true if the dates are the same
} else if result == .OrderedDescending {
    // true if date1 is later than date1
}

목표 -C

if ([date1 isEqualToDate:date2]) {
    // returns false, as both date are not equal
}

NSDate *earlierDate = [date1 earlierDate:date2]; // returns date which comes earlier from both date, here it will return date2
NSDate *laterDate = [date1 laterDate:date2]; // returns date which comes later from both date, here it will return date1

NSComparisonResult result = [date1 compare:date2];
if (result == NSOrderedAscending) {
    // fails
    // comes here if date1 is earlier then date2, in our case it will not come here
} else if (result == NSOrderedSame){
    // fails
    // comes here if date1 is same as date2, in our case it will not come here
} else{ // NSOrderedDescending
    // succeeds
    // comes here if date1 is later than date2, in our case it will come here
}

날짜를 비교하고 초, 주, 월 및 년을 처리하려는 경우 :

스위프트 3

let dateStringUTC = "2016-10-22 12:37:48 +0000"
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss X"
let date = dateFormatter.date(from: dateStringUTC)!

let now = Date()

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.maximumUnitCount = 2
let string = formatter.string(from: date, to: Date())! + " " + NSLocalizedString("ago", comment: "added after elapsed time to say how long before")

또는 각 구성 요소에 대해 다음을 사용할 수 있습니다.

// get the current date and time
let currentDateTime = Date()

// get the user's calendar
let userCalendar = Calendar.current

// choose which date and time components are needed
let requestedComponents: Set<Calendar.Component> = [
    .year,
    .month,
    .day,
    .hour,
    .minute,
    .second
]

// get the components
let dateTimeComponents = userCalendar.dateComponents(requestedComponents, from: currentDateTime)

// now the components are available
dateTimeComponents.year 
dateTimeComponents.month 
dateTimeComponents.day  
dateTimeComponents.hour 
dateTimeComponents.minute
dateTimeComponents.second

Unix Epoch 시간 가져 오기

Unix Epoch Time 을 얻으려면 상수 timeIntervalSince1970 사용하십시오.

빠른

let date = NSDate() // current date
let unixtime = date.timeIntervalSince1970

목표 -C

NSDate *date = [NSDate date]; // current date
int unixtime = [date timeIntervalSince1970];

NSDateFormatter

NSDate 객체를 문자열로 변환하는 것은 단지 3 단계입니다.

1. NSDateFormatter 객체를 만듭니다.

빠른

let dateFormatter = NSDateFormatter()

스위프트 3

let dateFormatter = DateFormatter()

목표 -C

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

2. 문자열을 넣을 날짜 형식을 설정하십시오

빠른

dateFormatter.dateFormat = "yyyy-MM-dd 'at' HH:mm"

목표 -C

dateFormatter.dateFormat = @"yyyy-MM-dd 'at' HH:mm";

3. 형식화 된 문자열 가져 오기

빠른

let date = NSDate() // your NSDate object
let dateString = dateFormatter.stringFromDate(date)

스위프트 3

let date = Date() // your NSDate object
let dateString = dateFormatter.stringFromDate(date)

목표 -C

NSDate *date = [NSDate date]; // your NSDate object
NSString *dateString = [dateFormatter stringFromDate:date];

그러면 다음과 같은 결과가 2001-01-02 at 13:00 . 2001-01-02 at 13:00

노트

NSDateFormatter 인스턴스를 생성하는 것은 값 비싼 연산이기 때문에 한 번 생성하여 가능한 경우 다시 사용하는 것이 좋습니다.

날짜를 문자열로 변환하는 데 유용한 확장입니다.

extension Date {
        func toString() -> String {
            let dateFormatter = DateFormatter()
            dateFormatter.dateFormat = "MMMM dd yyyy"
            return dateFormatter.string(from: self)
        }
}

신속한 날짜 생성을위한 유용한 링크는 사람이 읽을 수있는 날짜가 빠른 nsdateformatter 입니다.

날짜 형식을 생성하려면 날짜 형식 패턴을 참조하십시오.

시간과 분 (만)에서 전체 NSDate로 구성된 NSDate를 변환하십시오.

서버에서 String으로 반환하고이 값으로 만 NSDate 인스턴스를 시작하면 많은 경우 (예 : 08:12)는 1 시간 및 1 분 형식의 NSDate를 만들었습니다 .

이 상황의 단점은 NSDate가 거의 완전히 "알몸"이며,이 객체가 다른 NSDate 유형과 함께 재생되도록 일, 월, 년, 초 및 시간대를 만드는 것입니다.

예를 들어, hourAndMinute가시와 분 형식으로 구성된 NSDate 유형이라고 가정 해 보겠습니다.

목표 -C

NSDateComponents *hourAndMinuteComponents = [calendar components:NSCalendarUnitHour | NSCalendarUnitMinute
                                                         fromDate:hourAndMinute];
NSDateComponents *componentsOfDate = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear
                                                                     fromDate:[NSDate date]];

NSDateComponents *components = [[NSDateComponents alloc] init];
[components setDay: componentsOfDate.day];
[components setMonth: componentsOfDate.month];
[components setYear: componentsOfDate.year];
[components setHour: [hourAndMinuteComponents hour]];
[components setMinute: [hourAndMinuteComponents minute]];
[components setSecond: 0];
[calendar setTimeZone: [NSTimeZone defaultTimeZone]];

NSDate *yourFullNSDateObject = [calendar dateFromComponents:components];

이제 당신의 목표는 "적나라한"것과 완전히 반대입니다.

UTC TimeZone을 사용하여 NSDate에서 시간 오프셋

여기서는 원하는 시간대의 현재 데이터에서 UTC 시간 오프셋을 계산합니다.

+(NSTimeInterval)getUTCOffSetIntervalWithCurrentTimeZone:(NSTimeZone *)current forDate:(NSDate *)date  {
    NSTimeZone *utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];
    NSInteger currentGMTOffset = [current secondsFromGMTForDate:date];
    NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:date];
    NSTimeInterval gmtInterval = currentGMTOffset - gmtOffset;
    return gmtInterval;
}

시간주기 유형 가져 오기 (12 시간 또는 24 시간)

현재 날짜에 AM 또는 PM에 대한 기호가 포함되어 있는지 확인

목표 -C

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

NSDateFormatter 에서 시간주기 유형 요청

목표 -C

NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
NSRange containsA = [formatStringForHours rangeOfString:@"a"];
BOOL is24h = containsA.location == NSNotFound;

ICU 사양 에 따라 "j"라는 특별한 날짜 템플릿 문자열을 사용합니다 ...

[...]은 보충 데이터에서 시간 요소의 기본 특성에 의해 결정된대로 로캘 (h, H, K 또는 k)의 기본 시간 형식을 요청합니다. [...] API에 전달 된 스켈레톤에서 'j'를 사용하면 스켈레톤 요청에 로케일의 선호 시간주기 유형 (12 시간 또는 24 시간)을 요청할 수있는 유일한 방법입니다.

그 마지막 문장은 중요합니다. 스켈레톤 요청에 로케일의 기본 시간주기 유형을 요청하는 유일한 방법입니다. NSDateFormatterNSCalendar 는 ICU 라이브러리를 기반으로하므로 여기에서도 마찬가지입니다.

참고

두 번째 옵션은 이 대답 에서 파생되었습니다.

JSON 날짜 형식에서 NSDate 가져 오기 "/ Date (1268123281843) /"

Json.NET 4.5 이전의 날짜는 "/ Date (1198908717056) /"Microsoft 형식을 사용하여 작성되었습니다. 서버에서이 형식으로 날짜를 보내면 아래 코드를 사용하여 NSDate로 직렬화 할 수 있습니다.

목표 -C

(NSDate*) getDateFromJSON:(NSString *)dateString
{
    // Expect date in this format "/Date(1268123281843)/"
    int startPos = [dateString rangeOfString:@"("].location+1;
    int endPos = [dateString rangeOfString:@")"].location;
    NSRange range = NSMakeRange(startPos,endPos-startPos);
    unsigned long long milliseconds = [[dateString substringWithRange:range] longLongValue];
    NSLog(@"%llu",milliseconds);
    NSTimeInterval interval = milliseconds/1000;
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
    // add code for date formatter if need NSDate in specific format.
    return date;
}

NSDate에서 역사적인 시간 가져 오기 (예 : 5 초 전, 2 개월 전, 3 시간 전)

이것은 타임 스탬프가있는 최신 피드가 필요한 다양한 채팅 응용 프로그램, RSS 피드 및 소셜 응용 프로그램에서 사용할 수 있습니다.

목표 -C

- (NSString *)getHistoricTimeText:(NSDate *)since
{
    NSString *str;
    NSTimeInterval interval = [[NSDate date] timeIntervalSinceDate:since];
    if(interval < 60)
        str = [NSString stringWithFormat:@"%is ago",(int)interval];
    else if(interval < 3600)
    {
        int minutes = interval/60;
        str = [NSString stringWithFormat:@"%im ago",minutes];
    }
    else if(interval < 86400)
    {
        int hours =  interval/3600;
        
        str = [NSString stringWithFormat:@"%ih ago",hours];
    }
    else
    {
        NSDateFormatter *dateFormater=[[NSDateFormatter alloc]init];
        [dateFormater setLocale:[NSLocale currentLocale]];
        NSString *dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMM d, YYYY" options:0 locale:[NSLocale currentLocale]];
        [dateFormater setDateFormat:dateFormat];
        str = [dateFormater stringFromDate:since];
        
    }
    return str;
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow