NSDate를 연도, 월, 일 및시, 분, 초 모두에 대해 특정 스타일로 포맷


132

기본적으로 현재 날짜와 시간을 별도로 형식화해야합니다.

2009-04-26 
11:06:54

동일한 주제에 대한 다른 질문에서 아래 코드는 다음을 생성합니다.

지금 : | 2009-06-01 23:18:23 +0100 | 
dateString : | 2009 년 6 월 1 일 23 : 18 | 
구문 분석 : | 2009-06-01 23:18:00 +0100 |

이것은 거의 내가 찾고있는 것이지만 요일과 시간을 구분하고 싶습니다.

NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateFormat:@"MMM dd, yyyy HH:mm"];

NSDate *now = [[NSDate alloc] init];

NSString *dateString = [format stringFromDate:now];

NSDateFormatter *inFormat = [[NSDateFormatter alloc] init];
[inFormat setDateFormat:@"MMM dd, yyyy"];

NSDate *parsed = [inFormat dateFromString:dateString];

NSLog(@"\n"
"now:        |%@| \n"
"dateString: |%@| \n"
"parsed:     |%@|", now, dateString, parsed);

1
이 문제를 해결하기 위해 사용한 코드를 작성하는 데 시간이 걸리는 경우 게시물에 대한 편집이 아니라 답변에 고정시킬 것입니다 (이 경우 edit2 아래의 모든 것). 어느 쪽이든 큰 문제는 아니지만 질문에 대한 해결책이라는 것을 더 쉽게 찾고 볼 수 있습니다.
로렌스 존스턴

답변:


72

iPhone 형식 문자열은 유니 코드 형식 입니다. 링크 뒤에는 위의 모든 글자가 무엇을 의미하는지 설명하는 표가있어 직접 만들 수 있습니다.

물론 날짜 포맷터 작업을 마쳤 으면 잊지 마십시오. 위의 코드 formatnow, 및 inFormat입니다.


ARC가 활성화 된 상태에서도 누출이 발생합니까?
Dimme

19
위의 ARC에서 누수가 발생하지 않습니다 (물론 ARC는이 토론을 할 때 2009에서 사용할 수 없었습니다).
Rob Napier

194

이것은 내가 사용한 것입니다 :

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"yyyy-MM-dd"];

NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init];
[timeFormat setDateFormat:@"HH:mm:ss"];

NSDate *now = [[NSDate alloc] init];

NSString *theDate = [dateFormat stringFromDate:now];
NSString *theTime = [timeFormat stringFromDate:now];

NSLog(@"\n"
      "theDate: |%@| \n"
      "theTime: |%@| \n"
      , theDate, theTime);

[dateFormat release];
[timeFormat release];
[now release];

12

이 방법을 사용하면 날짜를 전달할 수 있습니다.

-(NSString *)getDateFromString:(NSString *)string
{

    NSString * dateString = [NSString stringWithFormat: @"%@",string];

    NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"your current date format"];
    NSDate* myDate = [dateFormatter dateFromString:dateString];

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"your desired format"];
    NSString *stringFromDate = [formatter stringFromDate:myDate];

    NSLog(@"%@", stringFromDate);
    return stringFromDate;
}

11
    NSDateFormatter *dateformat = [[NSDateFormatter alloc] init];
    [dateformat setDateFormat:@"Your Date Format"];

반환 형식을 ...로 설정하십시오.

yyyy-MM-dd귀국 2015-12-17날짜

yyyy-MMM-dd 귀국 2015-Dec-17날짜

yy-MM-dd귀국 15-12-17날짜

dd-MM-yy 귀국 17-12-15날짜

dd-MM-yyyy 귀국 17-12-2015날짜

yyyy-MMM-dd HH:mm:ss 귀국 2015-Dec-17 08:07:13날짜 및 시간

yyyy-MMM-dd HH:mm 귀국 2015-Dec-17 08:07날짜 및 시간

자세한 내용을 보려면 지금 클릭하십시오.

감사합니다.....


1
코드 샘플과 함께 추가 설명을 제공하십시오.
Maciej Lach

이 날짜 '2018-06-08T07 : 30 : 05.391Z'에 'yyyy-MM-dd'T'HH : mm : ss.000Z'를 시도했지만 nil 값을 얻었습니다.
Pramod Tapaniya 2016 년

4

새로운 것은 아니지만 여전히 내 방법을 공유하고 싶습니다.

+(NSString*) getDateStringFromSrcFormat:(NSString *) srcFormat destFormat:(NSString *)
destFormat scrString:(NSString *) srcString
{
    NSString *dateString = srcString;
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    //[dateFormatter setDateFormat:@"MM-dd-yyyy"];
    [dateFormatter setDateFormat:srcFormat];
    NSDate *date = [dateFormatter dateFromString:dateString];

    // Convert date object into desired format
    //[dateFormatter setDateFormat:@"yyyy-MM-dd"];
    [dateFormatter setDateFormat:destFormat];
    NSString *newDateString = [dateFormatter stringFromDate:date];
    return newDateString;
}

3

신속한

var dateString:String = "2014-05-20";
var dateFmt = NSDateFormatter()
// the format you want
dateFmt.dateFormat = "yyyy-MM-dd"
var date1:NSDate = dateFmt.dateFromString(dateString)!;

0

스위프트 3

extension Date {
    
    func toString(template: String) -> String {
        let formatter = DateFormatter()
        formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: template, options: 0, locale: NSLocale.current)
        return formatter.string(from: self)
    }
    
}

용법

let now = Date()
let nowStr0 = now.toString(template: "EEEEdMMM") // Tuesday, May 9
let nowStr1 = now.toString(template: "yyyy-MM-dd") // 2017-05-09
let nowStr2 = now.toString(template: "HH:mm:ss") // 17:47:09

필요에 따라 템플릿을 가지고 놀아보십시오. 예 및 문서 여기에 도움을 당신은 당신이 필요로하는 템플릿을 구축 할 수 있습니다.

노트

예를 들어 DateFormatter사용하려는 경우 캐시를 원할 수 있습니다 TableView. 아이디어를 제공하기 위해 1000 개 이상의 날짜를 반복 하면 위의 함수를 사용하여 0.5 초가 걸리고 0.05 초를 사용했습니다 .toString(template: String)myFormatter.string(from: Date)


이 메모를 더 강력하게 만들기 위해 (매우 중요하기 때문에) 새 인스턴스의 기본값을 사용하여 선택적 매개 변수를 사용하도록 함수를 리팩터링 할 수 있습니다. 왜 당신이 다운 보트를 받았는지 모르겠어요.
Vive

-6
NSDate *date         = [NSDate date];
NSDateFormatter *df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"yyyy-MM-dd"]
NSString *dateString  = [df stringFromDate:date];
[df setDateFormat:@"hh:mm:ss"];
NSString *hoursString = [df stringFromDate:date];

그게 다야, 당신이 원하는 모든 것을 얻었 어.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.