计算2个日期间隔时间

计算2个日期间隔时间

计算2个时间的间隔多久不需要自行写程式计算,只要使用 NSDateComponents 这个物件,再配合几个物件:

  • NSCalendar
  • NSDateFormatter
  • NSDate

范例中是要计算从1979-12-03起至2013-03-29间隔时间共是多久,所以我们需要有2个时间点,开始的时间点使用NSDate并指定日期表示,再建立结束的时间点,有2个时间点之后,我们要使用NSCalendar设定为NSGregorianCalendar历别。全部都准备到位之后,再由NSDateComponents计算2个时间的间隔: (阅读全文…)

 字串转成指定的日期格式

字串转成指定的日期格式

正常情况我们利用NSDate取得日期的程式:

//-----------start-----------
    NSDate *date = [NSDate date];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"YYYY MMMM d EEEE"];
    NSString *dateString = [dateFormat stringFromDate:date];
    NSLog(@"%@",dateString);
//------------end------------

输出的结果:

2013-03-29 10:30:41.328 testa1[45216:c07] 2013 March 29 Friday

(阅读全文…)

 设定日期区域

设定日期区域

我们在设定日期格式未设定所在的区域时,日期的显示就是以英语系为主,但如果您有设定区域,那显示就会依照该区域的显示方式,下面我们将显示设定成台湾:

//-----------start-----------
    [dateFormat setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_TW"]];
    [dateFormat setDateFormat:@"MM/dd/yyyy hh:mm a"];
    NSLog(@"date: %@", [dateFormat stringFromDate:today]);
//------------end------------

输出结果:

2013-03-28 22:27:04.328 testa1[33029:c07] date: 03/28/2013 10:27 下午

(阅读全文…)

 设定日期输出格式

设定日期输出格式

想要改变日期输出的格式可以使用NSDateFormattersetDateFormat,根据Date Formatters网页提供的输入的规格与在iOS上比对之后,大略上与网页的差不多。

年:yyyy 月:MM 日:dd 时:hh(12小时制),HH(24小时制) 分:mm 时制:a (AM/PM)

例1:

预计的日期输出格式为:年/月/日 时(24小时制):分,所以要输入:yyyy/MM/dd HH:mm

//-----------start-----------
    NSDate *today = [NSDate dateWithTimeIntervalSinceNow:0];
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
    [dateFormat setDateFormat:@"yyyy/MM/dd HH:mm"];
    NSLog(@"date: %@", [dateFormat stringFromDate:today]);
//------------end------------

输出结果: (阅读全文…)

 Objective-C 快速参考

Objective-C 快速参考

Objective-C是利用几个重要的观念和C一些语法构成,然后再配合Foundation Framework完成最基本的Objective-C的环境在iOS或OSX上执行的APP,所以在文中只针对Objective-C提供的特性去做说明,Foundation Framework就归类于Framework再做介绍。

呼叫方法 (Calling Methods)

基本方法

Objective-C在呼叫方法时是以讯息的方式传递,而方法如果有参数时就必需要以:冒号隔开。

//-----------start-----------
[object method];
[object methodWithParameter:parameter];
//------------end------------

(阅读全文…)

 NSData转Byte、Byte转NSData

NSData转Byte、Byte转NSData

NSData提供可以储存任意字元资料的物件,它提供了介面来使用储存的资料,所以程式在物件的环境中会更方便,记忆体管理也更容易,不过有时候与C程式要互通时,还是必需要转成Byte方式给C程式使用,所以下面将针对这两种型别转换做介绍。

NSData 转 Byte

这里假设有个档案为danny.bin,我们利用NSData将档案读入并且转成Byte阵列,这里要注意的是,在C里面并没有Byte的类型,而是用unsigned char的方式。

//-----------start-----------
    unsigned char *cData;
    NSData* nsData=[NSData dataWithContentsOfFile:@"danny.bin"];
    cData = malloc([nsData length]);
    [nsData getBytes:cData];
//------------end------------

(阅读全文…)

 C 字串与 NSString 互转

C 字串与 NSString 互转

C 字串(String)使用的是 char 类型,将每个char串连起来利用指标型式成为字串,Objective-C使用的是NSString,它是利用物件的方式存放整个字串,预设是使用Unicode 16bit存放,通常叫他 unichar ,所以在C String与NSString中间需要转换,下面范例会介绍两种互转的方式。

  • NSString to C String (NSString to String)

Apple官方NSString Class文件中有提到UTF8String的NSString method,转换完成后会在最后加个NULL当做字串的结尾,也符合C字串阵例的存放原则。

UTF8String
Returns a null-terminated UTF8 representation of the receiver.

所以:

//-----------start-----------
NSString nstr=@"Danny123";
const char *str=[nsstr UTF8String];
//------------end------------

  • C String to NSString (String to NSString)

方法1:

Apple官方NSString Class文件中有提到stringWithUTF8String,转换后会返回使用UTF8编码的C阵列。

stringWithUTF8String:
Returns a string created by copying the data from a given C array of UTF8-encoded bytes.

程式:

//-----------start-----------
NSString *new_nstr=[NSString stringWithUTF8String:databaseName];
//------------end------------

方法2:

Apple官方NSString Class文件中有提到stringWithCString:encoding,转换后会返回使用指定编码的C阵列。

stringWithCString:encoding:
Returns a string containing the bytes in a given C array, interpreted according to a given encoding.

程式:

//-----------start-----------
   NSString *new_nstr=[NSString stringWithCString:databaseName encoding:NSUTF8StringEncoding];
//------------end------------

在Objective-C中的C String存放都是以UTF-8编码,所以整个转换过程必需要以UTF-8为主。

 检查档案是否存在

检查档案是否存在

检查档案是否存在则是使用NSFileManager的fileExistsAtPath并将要检查的档案完整路径传入来验证档案存在性与否。 例如:有个存于Documents目录并叫1.txt的档案,要检查它是否存在时就必需先知道它的完整路径:

//-----------start-----------
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *filepath=[documentsDirectory stringByAppendingPathComponent:@"1.txt"];
//------------end------------

所以整个路径就是:

/Users/danny/Library/Application Support/iPhone Simulator/6.0/Applications/BC7239AA-D727-4D8C-B986-B5A55F8C781D/Documents/1.txt

之后再将存有完整路径的filepath传至fileExistsAtPath让它检查档案是否存在。

//-----------start-----------
   if ([[NSFileManager defaultManager] fileExistsAtPath:filepath]){
        //这里放置如果档案存在时的程式
    }else{
        NSLog(@"档案不存在!");
    }
//------------end------------

 取得Temp完整路径

取得Temp完整路径

有时需要建立暂存档时,就可以使用iOS为每个APP提供的temp目录,要得知完整路径其实很简单,Framework中提供NSTemporaryDirectory()来得知暂存档的完整路径,并输出NSString的格式内容。

//-----------start-----------
NSLog(@"%@\n",NSTemporaryDirectory());
//------------end------------

输出结果:

/Users/danny/Library/Application Support/iPhone Simulator/6.0/Applications/BC7239AA-D727-4D8C-B986-B5A55F8C781D/tmp/