關於給個既定日期改成星期幾的問題?

本來寫了一個方法可以得到123這樣的數代表周幾代碼如下

////根據日期獲得當時星期幾

//-(NSString *)getWeekDay:(NSArray *)array

//{

//    NSMutableArray *weekArray=[NSMutableArray arrayWithObjects:@"",@"",@"",@"",@"", nil];

//    NSDateComponents *comps = [[NSDateComponents alloc] init];

//    [comps setYear:[array[0] integerValue]];

//    [comps setMonth:[array[1] integerValue]];

//    [comps setDay:[array[2] integerValue]];

//    NSCalendar *gregorian = [[NSCalendar alloc]

//                            initWithCalendarIdentifier:NSGregorianCalendar];

//    NSDate *date = [gregorian dateFromComponents:comps];

//    NSDateComponents *weekdayComponents =

//    [gregorian components:NSWeekdayCalendarUnit fromDate:date];

//    NSInteger weekday = [weekdayComponents weekday];

//

//    return weekArray[weekday-2];

//}


後來被項目經理鄙視了然後就去查方法最後各種轉格式都無濟於事上最終代碼

_dateArray[section]代表2012-12-10這種格式的字符串

NSDateFormatter *dateFormatter=[[NSDateFormatteralloc]init];

    [dateFormattersetDateFormat:@"yyyy-MM-dd"];

   NSDate *date=[dateFormatterdateFromString:_dateArray[section]];

    [dateFormattersetDateFormat:@"yyyy-MM-dd    EEEE"];

    [dateFormatter setLocale:[[NSLocalealloc]initWithLocaleIdentifier:@"zh_CN"]];

    

   NSString *locationString=[dateFormatterstringFromDate:date];

    

    //拼接獲得的星期幾

    titleLabel.text =locationString;

雖然轉成功了但是也讓別人鄙視了又查了好多格式化補充能量

 NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];

    [dateFormatter setTimeZone:timeZone];//獲得當前時區好像是東八區


複製過來的這也是個很神奇的東西好像能以各種格式輸出可以查看他的APINSNumberFormatterDecimalStyle

NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];

        formatter.numberStyle = NSNumberFormatterDecimalStyle;

        NSString *string = [formatter stringFromNumber:[NSNumber numberWithInt:123456789]];

        NSLog(@"Formatted number string:%@",string);

NSNumberFormatterDecimalStyle 123,456,789

kCFNumberFormatterCurrencyStyle $123,456,789.00貨幣計數

下面都是12345打出來的數據

kCFNumberFormatterPercentStyle 1,234,500%數據不對沒那麼大的百分數嗎

kCFNumberFormatterScientificStyle 1.2345E4科學計數法

kCFNumberFormatterSpellOutStyle twelve thousand three hundred forty-five 英語計數



各種格式轉化以後用的着收藏了

 [dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"];EEEE爲星期幾,EEE爲周幾
  [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  [dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 爲xx月,一個d可以省去01日前的0

設置倒角

//    self.shuHuiLabel.layer.masksToBounds = YES;

//    self.shenGouLabel.layer.masksToBounds = YES;

//    self.shenGouLabel.layer.cornerRadius = 10;

//    self.shuHuiLabel.layer.cornerRadius = 10;

獲取的時間的時區是0時區,需要轉換成所在的時區,中國一般是在8時區,所以獲取的時間會比實際少8小時,解決方法如下:

  1. NSDate *date = [NSDate date];  
  2. NSTimeZone *zone = [NSTimeZone systemTimeZone];  
  3. NSInteger interval = [zone secondsFromGMTForDate: date];  
  4. NSDate *localeDate = [date  dateByAddingTimeInterval: interval];  
  5. NSLog(@"enddate=%@",localeDate);  

//科學計算法精確值根據給的數確定

 NSDecimalNumber *number = [NSDecimalNumberdecimalNumberWithMantissa:12345

                               

                                                               exponent:-3

                               

                                                             isNegative:NO];

   NSLog(@"%@",number);

    

    NSDecimalNumber *subtotal = [NSDecimalNumberdecimalNumberWithString:@"11290.211"];

    

    NSDecimalNumber *discount = [NSDecimalNumberdecimalNumberWithString:@"0.22"];

    

    

    

    NSDecimalNumber *total = [subtotaldecimalNumberByAdding:discount];

    NSDecimalNumber *total1 = [subtotaldecimalNumberBySubtracting:discount];


    NSLog(@"Rounded total: %@======%@", total,total1);

    NSString *str = [NSStringstringWithFormat:@"%@",total];

   NSLog(@"%@",str);

    

    NSNumberFormatter *formatter = [[NSNumberFormatteralloc] init];

    

    

    formatter.numberStyle =kCFNumberFormatterDecimalStyle;

    

   NSString *str1 = @"12344.54";

   int inter = [str1 intValue];

    

   NSString *string = [formatter stringFromNumber:subtotal];

    

    

    NSLog(@"Formatted number string:%d%@",inter,string);

    

在開發iOS程序時,有時候需要將時間格式調整成自己希望的格式,這個時候我們可以用NSDateFormatter類來處理。

例如:如何將格式爲“12-May-14 05.08.02.000000 PM”的時間轉化成“2014/05/12 5:08:02”,下面是具體實現代碼:

    NSString* timeStr = @"12-May-14 05.08.02.000000 PM";

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

    [formatter setDateStyle:NSDateFormatterMediumStyle];

    [formatter setTimeStyle:NSDateFormatterShortStyle];

    [formatter setDateFormat:@"dd-MMMM-yy hh.mm.ss.ssssss aa"];//設置源時間字符串的格式

    NSTimeZone* timeZone = [NSTimeZone timeZoneWithName:@"Asia/Shanghai"];//設置時區

    [formatter setTimeZone:timeZone];

    NSDate* date = [formatter dateFromString:timeStr];//將源時間字符串轉化爲NSDate

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

    [toformatter setDateStyle:NSDateFormatterMediumStyle];

    [toformatter setTimeStyle:NSDateFormatterShortStyle];

    [toformatter setDateFormat:@"yyyy/MM/dd h:MM:ss"];//設置目標時間字符串的格式

    NSString *targetTime = [toformatter stringFromDate:date];//將時間轉化成目標時間字符串

    NSLog(@"targetTime === %@",targetTime);

    

其實時間格式之間的相互轉化完全依賴於NSDateFormatter。

NSDateFormatter有下面2個方法:
  - (NSString *)stringFromDate:(NSDate *)date;//NSDate轉NSString
  - (NSDate *)dateFromString:(NSString *)string;//NSString轉NSDate
 

字符說明

(:)

時間分隔符。在某些區域設置中,可以使用其他字符表示時間分隔符。時間分隔符在格式化時間值時分隔小時、分鐘和秒。格式化輸出中用作時間分隔符的實際字符由您的應用程序的當前區域性值確定。

(/)

日期分隔符。在某些區域設置中,可以使用其他字符表示日期分隔符。日期分隔符在格式化日期值時分隔日、月和年。格式化輸出中用作日期分隔符的實際字符由您的應用程序的當前區域性確定。

(%)

用於表明不論尾隨什麼字母,隨後字符都應該以單字母格式讀取。也用於表明單字母格式應以用戶定義格式讀取。有關更多詳細信息,請參見下面的內容。

d

將日顯示爲不帶前導零的數字(如 1)。如果這是用戶定義的數字格式中的唯一字符,請使用 %d。

dd

將日顯示爲帶前導零的數字(如 01)。

EEE

將日顯示爲縮寫形式(例如 Sun)。

EEEE

將日顯示爲全名(例如 Sunday)。

M

將月份顯示爲不帶前導零的數字(如一月表示爲 1)。如果這是用戶定義的數字格式中的唯一字符,請使用 %M。

MM

將月份顯示爲帶前導零的數字(例如 01/12/01)。

MMM

將月份顯示爲縮寫形式(例如 Jan)。

MMMM

將月份顯示爲完整月份名(例如 January)。

gg

顯示時代/紀元字符串(例如 A.D.)

h

使用 12 小時制將小時顯示爲不帶前導零的數字(例如 1:15:15 PM)。如果這是用戶定義的數字格式中的唯一字符,請使用 %h。

hh

使用 12 小時制將小時顯示爲帶前導零的數字(例如 01:15:15 PM)。

H

使用 24 小時制將小時顯示爲不帶前導零的數字(例如 1:15:15)。如果這是用戶定義的數字格式中的唯一字符,請使用 %H。

HH

使用 24 小時制將小時顯示爲帶前導零的數字(例如 01:15:15)。

m

將分鐘顯示爲不帶前導零的數字(例如 12:1:15)。如果這是用戶定義的數字格式中的唯一字符,請使用 %m。

mm

將分鐘顯示爲帶前導零的數字(例如 12:01:15)。

s

將秒顯示爲不帶前導零的數字(例如 12:15:5)。如果這是用戶定義的數字格式中的唯一字符,請使用 %s。

ss

將秒顯示爲帶前導零的數字(例如 12:15:05)。

f

顯示秒的小數部分。例如,ff 將精確顯示到百分之一秒,而 ffff 將精確顯示到萬分之一秒。用戶定義格式中最多可使用七個 f 符號。如果這是用戶定義的數字格式中的唯一字符,請使用 %f。

t

使用 12 小時制,並對中午之前的任一小時顯示大寫的 A,對中午到 11:59 P.M 之間的任一小時顯示大寫的 P。如果這是用戶定義的數字格式中的唯一字符,請使用 %t。

tt

對於使用 12 小時制的區域設置,對中午之前任一小時顯示大寫的 AM,對中午到 11:59 P.M 之間的任一小時顯示大寫的 PM。

對於使用 24 小時制的區域設置,不顯示任何字符。

y

將年份 (0-9) 顯示爲不帶前導零的數字。如果這是用戶定義的數字格式中的唯一字符,請使用 %y。

yy

以帶前導零的兩位數字格式顯示年份(如果適用)。

yyy

以四位數字格式顯示年份。

yyyy

以四位數字格式顯示年份。

z

顯示不帶前導零的時區偏移量(如 -8)。如果這是用戶定義的數字格式中的唯一字符,請使用 %z。

zz

顯示帶前導零的時區偏移量(例如 -08)

zzz

顯示完整的時區偏移量(例如 -08:00)


iOS NSDate日期操作總結

1 // 當前時間創建NSDate

        NSDate *myDate = [NSDate date];

        NSLog(@"myDate = %@",myDate);

2 //從現在開始的24小時

        NSTimeInterval secondsPerDay = 24*60*60;

        NSDate *tomorrow = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay];

        NSLog(@"myDate = %@",tomorrow);

3//根據已有日期創建日期

         NSTimeInterval secondsPerDay1 = 24*60*60;

        NSDate *now = [NSDate date];

        NSDate *yesterDay = [now addTimeInterval:-secondsPerDay1];

        NSLog(@"yesterDay = %@",yesterDay);

 

 4//比較日期

        BOOL sameDate = [now isEqualToDate:yesterDay];

        NSLog(@"sameDate = %lu",sameDate);

        4.1//獲取較早的日期

        NSDate *earlierDate = [yesterDay earlierDate:now];

        NSLog(@"earlierDate  = %@",earlierDate);

        4.2//較晚的日期

        NSDate *laterDate = [yesterDay laterDate:now];

 NSLog(@"laterDate  = %@",laterDate);

 

        //兩個日期之間相隔多少秒

        NSTimeInterval secondsBetweenDates= [yesterDay timeIntervalSinceDate:now];

        NSLog(@"secondsBetweenDates=  %lf",secondsBetweenDates);

        //通過NSCALENDAR類來創建日期

        NSDateComponents *comp = [[NSDateComponentsalloc]init];

        [comp setMonth:06];

        [comp setDay:01];

        [comp setYear:2001];

        NSCalendar *myCal = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];

        NSDate *myDate1 = [myCal dateFromComponents:comp];

        NSLog(@"myDate1 = %@",myDate1);

 

        //從已有日期獲取日期

        unsigned units  = NSMonthCalendarUnit|NSDayCalendarUnit|NSYearCalendarUnit;

        NSDateComponents *comp1 = [myCal components:units fromDate:now];

        NSInteger month = [comp1 month];

        NSInteger year = [comp1 year];

        NSInteger day = [comp1 day];

        //NSDateFormatter實現日期的輸出

 NSDateFormatter *formatter = [[NSDateFormatteralloc]init];

        [formatter setDateStyle:NSDateFormatterFullStyle];//直接輸出的話是機器碼

        //或者是手動設置樣式[formatter setDateFormat:@"yyyy-mm-dd"];

        NSString *string = [formatter stringFromDate:now];

        NSLog(@"string = %@",string);

        NSLog(@"formater = %@",formatter);

 

 

//獲取日期格式對象

- (NSDateFormatter *)dateFormatter {

if (dateFormatter == nil) {

dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateStyle:NSDateFormatterMediumStyle];

[dateFormatter setTimeStyle:NSDateFormatterNoStyle];

}

return dateFormatter;

}


NSDate與NSDateFormatter的相關用法

 NSString *dateString=@"1900-01-01";
 NSDateFormatter *dateFormatter=[[NSDateFormatter alloc]init];
 [dateFormatter setDateFormat:@"yyyy-MM-dd"];
 NSDate *date=[dateFormatter dateFromString:dateString];
 [dateFormatter release];

 NSString轉NSDate與上面類似
 NSString *dateString=[dateFormatter dateFromString:[NSDate date]];

2.NSDateFormatter 的一些格式介紹
  [dateFormatter setDateFormat:@"yyyy年MM月dd日#EEEE"];EEEE爲星期幾,EEE爲周幾
  [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
  [dateFormatter setDateFormat:@"yyyy年MMMMd日"];//MMMM 爲xx月,一個d可以省去01日前的0

3.NSString轉NSDate少一天的解決辦法
 用下面這種格式化方式 
  1.[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; 

  2.
   NSCalendar *calendar = [NSCalendar currentCalendar];
   NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit |                                  NSYearCalendarUnit) fromDate:[NSDate date]];
   NSDate *todayDate = [calendar dateFromComponents:components];




發佈了5 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章