Tuesday, 31 January 2012

Date Formate Info For iPhone sdk...

Update : If you have this type of String "2013-01-22T18:24:52.963" then you can convert it like bellow...

First use this my custom method for convert any Date string in another date string with different format

-(NSString *)changeDateFormat:(NSString*)stringDate dateFormat:(NSString*)dateFormat getwithFormat:(NSString *)getwithFormat{
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

//this bellow 3 lines used for set system related date format issue
        NSLocale *enUSPOSIXLocale = [[NSLocale allocinitWithLocaleIdentifier:@"en_US_POSIX"];
    assert(enUSPOSIXLocale != nil);
       [dateFormatter setLocale:enUSPOSIXLocale];

       [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    [dateFormatter setDateFormat:dateFormat];
    NSDate *date = [dateFormatter dateFromString:stringDate];
    date = [dateFormatter dateFromString:stringDate];
    dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [dateFormatter setDateFormat:getwithFormat];
    NSString *convertedString = [dateFormatter stringFromDate:date];
    NSLog(@"Converted String : %@",convertedString);
    return convertedString;

just call this method like bellow...

NSString *strDateNewFormat  = [self changeDateFormat:[[arrDieryDetail valueForKey:@"CreateDate"] objectAtIndex:0] dateFormat:@"
yyyy-MM-dd'T'HH:mm:ss.SSS" getwithFormat:@"dd/MM/yyyy"];
NSLog(@"New Date String : %@", strDateNewFormat);


It is quite common to have to display time information in your app, be it the current time, news feed’s creation date, scheduled meeting time or birthday reminders. However, not all of them are displayed the same way and may require different formatting. To do that with Objective-C for iPhone apps, NSDateFormatter is what we need.

In most cases, you’d just need to use the default styles defined in NSDateFormatterStyle.
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSLog(@"%@", [dateFormatter stringFromDate:[NSDate date]]);

[dateFormatter release];

// Output: Dec 2, 2008 3:58 PM
But at times, you’d prefer to set your own time format, and that’s where it starts to get tricky.
It is actually quite simple, all you have to do is to create a format string to tell NSDateFormatter how to format your time string.
[dateFormatter setDateFormat:@"hh:mm:ss"]
// Output: 03:58:27
The problem is, the official documentation from apple doesn’t really tell you what specifiers are available to format your string. Even worse, it doesn’t conform to the ISO 8601 standard! What a bummer! And after a bit of searching on the net and still come up short, I have decided to just hack a little bit of code together to dump a list of specifiers and their results.
(EDIT: Apparently, there is now a link to the Unicode Date Field Symbol Table that Apple follows, even though my test shows that it still doesn’t conform 100% to the standard. Thanks Benjamin and Adam for finding it.)
a: AM/PM
A: 0~86399999 (Millisecond of Day)

c/cc: 1~7 (Day of Week)
ccc: Sun/Mon/Tue/Wed/Thu/Fri/Sat
cccc: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday

d: 1~31 (0 padded Day of Month)
D: 1~366 (0 padded Day of Year)

e: 1~7 (0 padded Day of Week)
E~EEE: Sun/Mon/Tue/Wed/Thu/Fri/Sat
EEEE: Sunday/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday

F: 1~5 (0 padded Week of Month, first day of week = Monday)

g: Julian Day Number (number of days since 4713 BC January 1)
G~GGG: BC/AD (Era Designator Abbreviated)
GGGG: Before Christ/Anno Domini

h: 1~12 (0 padded Hour (12hr))
H: 0~23 (0 padded Hour (24hr))

k: 1~24 (0 padded Hour (24hr)
K: 0~11 (0 padded Hour (12hr))

L/LL: 1~12 (0 padded Month)
LLL: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
LLLL: January/February/March/April/May/June/July/August/September/October/November/December

m: 0~59 (0 padded Minute)
M/MM: 1~12 (0 padded Month)
MMM: Jan/Feb/Mar/Apr/May/Jun/Jul/Aug/Sep/Oct/Nov/Dec
MMMM: January/February/March/April/May/June/July/August/September/October/November/December

q/qq: 1~4 (0 padded Quarter)
qqq: Q1/Q2/Q3/Q4
qqqq: 1st quarter/2nd quarter/3rd quarter/4th quarter
Q/QQ: 1~4 (0 padded Quarter)
QQQ: Q1/Q2/Q3/Q4
QQQQ: 1st quarter/2nd quarter/3rd quarter/4th quarter

s: 0~59 (0 padded Second)
S: (rounded Sub-Second)

u: (0 padded Year)

v~vvv: (General GMT Timezone Abbreviation)
vvvv: (General GMT Timezone Name)

w: 1~53 (0 padded Week of Year, 1st day of week = Sunday, NB: 1st week of year starts from the last Sunday of last year)
W: 1~5 (0 padded Week of Month, 1st day of week = Sunday)

y/yyyy: (Full Year)
yy/yyy: (2 Digits Year)
Y/YYYY: (Full Year, starting from the Sunday of the 1st week of year)
YY/YYY: (2 Digits Year, starting from the Sunday of the 1st week of year)

z~zzz: (Specific GMT Timezone Abbreviation)
zzzz: (Specific GMT Timezone Name)
Z: +0000 (RFC 822 Timezone)
(Letters not listed here did not return any result.)
Basically, you put the above letters together in a NSString to tell NSDateFormatter what to display.
In most cases, you can concatenate a letter together a number of times, and you will get a 0 padded version of it up to the number of letters you have concatenated (eg: @”ssssss” => @”000059). In other cases, the longer concatenated version will give a different result (eg: @”M” => @”12, @”MMMM” => @”December”).
Also, some of the different letters seem to be giving out the same results (eg. the q’s & the Q’s), while others have subtle differences (eg. the v’s & the z’s). One of the silly one is the uppercase Y’s, where the year jumps ahead at the end of the year, so unless you really want that, it’s better to just stick with the lowercase y’s.
You can grab the sample code here: DateFormat
-(void)StringFromDate:(NSDate *)DateLocal{
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"EEE, d MMMM YYYY h:m:s a"];
    NSString *dateString = [dateFormat stringFromDate:DateLocal];  
    NSLog(@"Date is HERE  =====>> %@",dateString);
    [dateFormat release];


-(NSString *)StringFromDate:(NSString *)DateLocal{
    DateLocal = [self trimString:DateLocal];
    NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];

//this bellow 3 lines used for set system related date format issue
        NSLocale *enUSPOSIXLocale = [[NSLocale allocinitWithLocaleIdentifier:@"en_US_POSIX"];
    assert(enUSPOSIXLocale != nil);
       [dateFormatter setLocale:enUSPOSIXLocale];

       [dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];  
    [dateFormatter setDateFormat:@"EEEE, d MMMM YYYY H:m:s"];
    NSDate *date = [dateFormatter dateFromString: DateLocal];
    NSString *tt = [dateFormatter stringFromDate:date];
    NSDate *dateReturn = [dateFormatter dateFromString:tt];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];

//this bellow 3 lines used for set system related date format issue
        NSLocale *enUSPOSIXLocale = [[NSLocale allocinitWithLocaleIdentifier:@"en_US_POSIX"];
    assert(enUSPOSIXLocale != nil);
       [dateFormat setLocale:enUSPOSIXLocale];

       [dateFormat setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];

    [dateFormat setDateFormat:@"EEE, d MMMM YYYY h:m:s a"];
    NSString *dateString = [dateFormat stringFromDate:dateReturn];  
    NSLog(@"Date is HERE  =====>> %@",dateString);
    [dateFormat release];
    return dateString;
#pragma mark -
#pragma mark Extra Methods

-(NSString*)trimString:(NSString *)theString {
NSString *theStringTrimmed = [theString stringByTrimmingCharactersInSet: [NSCharacterSet whitespaceAndNewlineCharacterSet]];
return theStringTrimmed;


 NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
    components.month = 1;
    NSDate *oneMonthFromNow = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:[NSDate date] options:0];


-(NSString *)StringFromDate:(NSDate *)DateLocal{
    NSDateFormatter *prefixDateFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [prefixDateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
    [prefixDateFormatter setDateFormat:@"MMMM d., y"];
    NSString * prefixDateString = [prefixDateFormatter stringFromDate:DateLocal];
    NSDateFormatter *monthDayFormatter = [[[NSDateFormatter alloc] init] autorelease];
    [monthDayFormatter setFormatterBehavior:NSDateFormatterBehavior10_4];
    [monthDayFormatter setDateFormat:@"d"];         
    int date_day = [[monthDayFormatter stringFromDate:DateLocal] intValue];      
    NSString *suffix_string = @"|st|nd|rd|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|th|st|nd|rd|th|th|th|th|th|th|th|st";
    NSArray *suffixes = [suffix_string componentsSeparatedByString: @"|"];
    NSString *suffix = [suffixes objectAtIndex:date_day];   
    prefixDateString = [prefixDateString stringByReplacingOccurrencesOfString:@"." withString:suffix];
    NSString *dateString =prefixDateString;       
    //  NSLog(@"%@", dateString);
    return dateString;

No comments:

Post a Comment