HYUNDAI/现代 拉杆音箱功放板怎么样,好不好

【Objective-C】NSDate详解及获取当前时间等常用操作 - Elite, not coder - ITeye技术网站
博客分类:
类用于保存时间值,同时提供了一些方法来处理一些基于秒级别时差运算和日期之间的早晚比较等。
创建或初始化可用以下方法
用于创建实例的类方法有
返回当前时间
返回以当前时间为基准,然后过了秒的时间
返回以为基准,然后过了秒的时间
返回以为基准,然后过了秒的时间
返回很多年以后的未来的某一天。(比如你需要一个比现在晚大很长时间的时间值,则可以调用该方法。测试返回了)
返回很多年以前的某一天。(比如你需要一个比现在早小大很长时间的时间值,则可以调用该方法。测试返回了公元前)
用于创建实例的实例方法有
返回以目前的实例中保存的时间为基准,然后过了秒的时间
用于初始化实例的实例方法有
初始化为当前时间。类似方法
初始化为以为基准,然后过了秒的时间。类似方法
初始化为以为基准,然后过了秒的时间
初始化为以当前时间为基准,然后过了秒的时间
日期之间比较可用以下方法
与比较,相同返回
与比较,返回较早的那个日期
与比较,返回较晚的那个日期
该方法用于排序时调用
当实例保存的日期值与相同时返回
当实例保存的日期值晚于时返回
当实例保存的日期值早于时返回
取回时间间隔可用以下方法
以为基准时间,返回实例保存的时间与的时间间隔
以当前时间为基准时间,返回实例保存的时间与当前时间的时间间隔
以为基准时间,返回实例保存的时间与的时间间隔
以为基准时间,返回实例保存的时间与的时间间隔
以为基准时间,返回当前时间与的时间间隔
将时间表示成字符串
以±的格式表示时间。(其中±表示与的存在多少小时多少分钟的时区差异。比如,若时区设置在北京,则±显示为)
同时奉上一个比较常用的获取自1970年以来的毫秒数的方法:
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
// NSTimeInterval返回的是double类型,输出会显示为10位整数加小数点加一些其他值
// 如果想转成int型,必须转成long long型才够大。
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
long long dTime = [[NSNumber numberWithDouble:time] longLongValue]; // 将double转为long long型
NSString *curTime = [NSString stringWithFormat:@"%llu",dTime]; // 输出long long型
浏览 62195
浏览: 629904 次
来自: 北京
有错误,inSampleSize 为2时,图片大小不是原来的2 ...
很详细!很有用的整理。&1.数据类型和常量:
&在Objective-c中提供了4种基本的数据类型:int float double以及char.
声明为int的变量只能用于保存整形值
声明为float类型的变量可存储浮点类型值(即包含小数位数.).&
double类型和float类型一样,只不过前者的精度大约是后者的2倍。
最后是char 数据类型,char类型可用来存储单个字符,例如字母a,数字6,或是一个分号。
在OBJ中(为了打字快点,以下Objective-C都简称OBJ)中,任何的数字、单个字符或者字符串,都称为常量。例如:数字58为一个整数常量,字符串@"this is OBJ!\n"表示一个常量的字符串对象。完全又常量组成的表达式我们就称为常量表达式。
所以,表达式:
是一个常量表达式,这是因为其表达式的每一项都是一个常量值。但是如果把i声明为了整形的变量,那么表达式:
就不是一个常量表达式了.
下面说说关于4个数据类型的情况..
&& &在OBJ中,整数常量是又一个或多个数字的序列所组成。序列前的负号表面该值是一个负数。合法值例如:10 、-10、158. 切记数字之间不能出现空格,且大于999的值不适用逗号来表示。比如:11000是一个合法的整数常量,但11 000是一个非法的常量.
&& &OBJ中存在两种特殊的格式,它们用于非十进制方式保存整数常量。第一种:如果整形值的第一位为0,那么这个整数将用八进制的方式表示,也就是说用基数8来表示。这种情况下改值的其他余位的值必须都是合法的八进制数字,即必须是0到7之间的数字。例如在OBJ八进制表示的值50,表示的方式为050,等价于十进制表示的值40.
同理,八进制的常量0177表示为十进制的值127,算法为1*64+7*8+7 =127.
可以通过在NSLog(如果不理解NSLog,暂时可以把它想象为C#的message.show()或者js的alert())中调用的格式字符串中使用格式符号%o,可在终端上用八进制显示整型值:
1 int a =1772 NSLog(@"int is : %o\n",a);
在上面例子的情况下,输出的八进制值不带有前导0,输出带有0的写法如下:
int a = 177;2
NSLog(@"%#o",a);
第二种情况:
如果整形常量以0和字母x(x无论大写还是小写)开头,那么这个值都将采用十六进制(即以16为基数)计数法里表示。紧跟在字母x后面的是十六进制的的数字,它可由0到9之间的任意数字或a到f(A到F)之间的字母组成。字母表示的数字分别为10到15。因此,给一个名为rgbColor的整型常量指派一个十六进制的值FFEF0D,可以使用以下语句:
1 rgbColor = 0xFFEF0D;
格式符号%x表示显示一个十六进制的值,该值不会带有前导0x,都是用a--f的小写字母表示十六进制的数字,需要带有前导0x,使用格式字符%#x表示:
1 NSLog(@"%#x\n",rgbColor);
不管是字符,浮点,整数,都有与其对应的值域,这个值域与存储特定类型的值而分配到的内存量有关,一般在语言当中没有规定这个量的大小,它依托于所运行的计算机,所以叫做设备的相关量.如一个整数可在计算机上占用32位,也可以使用64位存储。
2.float类型:
&& & float类型可包含存储小数位数的值,例如值3.、125.8以及-.0001都是合法的浮点数。显示浮点数,可以使用NSLog(@"%f",floatType)。
&& & 浮点常量也能使用科学计数法的方式来表示,值1.74e4就是一种科学计数法,他表示的是1.7乘以10的4次方。位于字母e前面的称为尾数,后面的称为指数,指数的前面可以放置正好和负号。指数表示将与尾数相乘的10的幕。因此,2.225e-3表示2.225乘以10的-3次方,值为0.00225.
3.double类型
&& &double类型和float类型很相似,一般使用double是在float不能满足精度(即所提供的值域)的要求时候。double类型变量可存储的位数大概是float的两倍多,大多数的计算机使用64位来表示double值。注意:除非你自己声明,否则OBJ均把所有浮点常量看都是double值,要清楚地表示float常量,一是声明float类型,二是在数字的尾部加一个f或则F,例如:
CGSizeMake(12.5f,13f);
要显示double类型的值,可使用%f,%e,或%g,它们显示float值所用的格式是相同的.
4.char类型&& & char类型可存储单个的字符。将字符放入一对括号中就可以得到字符常量。因此,'a'.'3'和';'都是合法的字符常量.第一个表示字母a,第二个表示字符3,第三个表示分号。第二个并不等同于数字的3.
&& & 字符常量'\n'(换行符)是一个合法的字符常量。因为反斜杠符号是OBJ中特殊符号。OBJ中将字符'\n'看作单个的字符,尽管它是由两个字符组成。
&& &如下示例,使用了基本的数据类型:
1 #import &Foundation/Foundation.h& 2
3 int main (int argc,char *argv[]) 4
NSAutoreleasePool *pool =[[NSAutorelelasePool alloc]init]; 8
int numVar =10;10 11
float floaVar =331.79;12 13
double doubleVar =9.44e+11;14 15
char charVar ='W';16 17
NSLog(@"numVar:=%i",numVar);18 19
NSLog(@"floatVar:=%f",floatVar);20 21
NSLog(@"doubleVar:=%e",doubleVar );22 23
NSLog(@"doubleVar :=%g",doubleVar );24 25
NSLog(@"charVar:=%c",charVar);26 27
[pool drain];28 29
return 0;30 31 }
输出:numVar =10;
&& & & floatVar =331.790009;
&& & & doubleVar =8.;
&& & & doubleVar =8.44e+11;
&& & & charVar ='W';
注意:我们指派给floatVar的值实际上是331.79,但是为什么输出331.790009呢?实际上,显示的值是由特定的计算机系统决定的。在计算机内部使用特殊的方式管理数字。计算机在处理数字的时候,很可能会遇到不准确性,比如1除以3,计算出为3.3333333, 这一串的3实际只是一个近似值,理论上,应存在无数个3。然而计算机只能保存这些数字,这就是计算机的不确定性所致。此处应用了相同的不确定性,所以在内存中不能精确的表示一些浮点值!!
Views(...) Comments()更多频道内容在这里查看
爱奇艺用户将能永久保存播放记录
过滤短视频
暂无长视频(电视剧、纪录片、动漫、综艺、电影)播放记录,
使用您的微博帐号登录,即刻尊享微博用户专属服务。
使用您的QQ帐号登录,即刻尊享QQ用户专属服务。
使用您的人人帐号登录,即刻尊享人人用户专属服务。
按住视频可进行拖动
把视频贴到Blog或BBS
当前浏览器仅支持手动复制代码
视频地址:
flash地址:
html代码:
通用代码:
通用代码可同时支持电脑和移动设备的分享播放
收藏成功,可进入查看所有收藏列表
方式1:用手机看
用爱奇艺APP或微信扫一扫,在手机上继续观看:
IOS开发零基础教程-C语言-内存-进制09-负数和取值范围
方式2:一键下载至手机
限爱奇艺安卓6.0以上版本
使用微信扫一扫,扫描左侧二维码,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
设备搜寻中...
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
连接失败!
请确保您要连接的设备(仅限安卓)登录了同一爱奇艺账号 且安装并开启不低于V6.0以上版本的爱奇艺客户端
部安卓(Android)设备,请点击进行选择
请您在手机端下载爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
其他安装方式:手机浏览器输入短链接http://71.am/udn
下载安装包到本机:&&
爱奇艺云推送
请您在手机端登录爱奇艺移动APP(仅支持安卓客户端)
使用微信扫一扫,下载爱奇艺移动APP
180秒后更新
打开爱奇艺移动APP,点击“我的-扫一扫”,扫描左侧二维码进行登录
没有安装爱奇艺视频最新客户端?
爸爸去哪儿2游戏 立即参与
IOS开发零基础教程-C语言-内存-进制09-负数和取值范围
播放量数据:
7,183人已订阅
你可能还想订阅他们:
{{#needAdBadge}} 广告{{/needAdBadge}}
&正在加载...
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制
安装爱奇艺视频客户端,
马上开始为您下载本片
5秒后自动消失
&li data-elem="tabtitle" data-seq="{{seq}}"& &a href="javascript:void(0);"& &span>{{start}}-{{end}}&/span& &/a& &/li&
&li data-downloadSelect-elem="item" data-downloadSelect-selected="false" data-downloadSelect-tvid="{{tvid}}"& &a href="javascript:void(0);"&{{pd}}&/a&
选择您要下载的《
色情低俗内容
血腥暴力内容
广告或欺诈内容
侵犯了我的权力
还可以输入
您使用浏览器不支持直接复制的功能,建议您使用Ctrl+C或右键全选进行地址复制4898人阅读
java随机数可能为负数
objective C :大于32767的int型数(RAND_MAX+1=32768)为负数。
& Objective-C 没有提供相关的函数生成随机数,不过C供了rand(), srand(), random(), srandom(), arc4random(),randomize()几个函数。要引用头文件#include&stdlib.h&
& 其中,random()和randomize()函数的使用的方法分别与rand()和srand()函数的使用方法对应类似。
&arc4random()不用seed
intrand(void);
void srand
(unsigned int n);
randomize();
arc4random();
int&random(void);
void&srandom&(unsigned&int&n);
现在以rand举例说明:
rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在stdlib.h头文件中。其值等于32767,或者更大。
srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。
randomize()等同srand(time(NULL))。
/* 例1:不指定种子的值 */
for(int i=0;
i&10; i++)
&&& printf(&%d &,rand()%10);
&&& 每次运行都将输出:1 7 4 0 9 4 8 8 2 4
例2:指定种子的值为1 */
for (int i=0; i&10;
i++)
&&&&printf(&%d &,rand()%10);
&&& 每次运行都将输出:1 7 4 0 9 4 8 8 2 4
&&& 例2的输出结果与例1是完全一样的。
/* 例3:指定种子的值为8 */
for (int i=0; i&10;
i++)
&&&&printf(&%d &,rand()%10);
&&& 每次运行都将输出:<span style="color:#ff 1 3 5 3 7 7 1 5
&& 该程序取得的随机&#20540;也是在[0,10)之间,与srand(1)所取得的&#20540;不同,但是每次运行程序的结果都相同。
/* 例4:指定种子&#20540;为现在的时间 */
srand((unsigned)time(NULL));
for (int i=0; i&10;
i&#43;&#43;)
&&&&printf(&%d &,rand()%10);
&&&& 该程序每次运行结果都不一样,因为每次启动程序的时间都不同。另外需要注意的是,使用time()函数前必须包含头文件time.h。
3. 注意事项
求一定范围内的随机数。
&&&& 如要取[0,10)之间的随机整数,需将rand()的返回&#20540;与10求模。
& & &randnumber&=&rand()&%&10;
& & &要取[a,b)之间的随机整数(包括a,但不包括b),使用:
&&&& 那么,如果取的&#20540;不是从0开始呢?你只需要记住一个通用的公式。
&&&& (rand() % (b - a)) &#43; a
伪随机浮点数。
&&&&&要取得0~1之间的浮点数,可以用:&&
&&&&&rand() / (double)(RAND_MAX)
&&&& 如果想取更大范围的随机浮点数,比如0~100,可以采用如下方法:
&&&& rand() /((double)(RAND_MAX)/100)
&&&& 其他情况,以此类推,这里不作详细说明。
&&&& 当然,本文取伪随机浮点数的方法只是用来说明函数的使用办法,你可以采用更好的方法来实现
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:11837次
排名:千里之外
(3)(1)(3)(5)Objective-C 【时间与日期处理】 - 博客频道 - CSDN.NET
CoderZYWang
所有努力的岁月,都不会被辜负,最差的结果,也不过是大器晚成!
自己在网上找到了一篇很好很好的帖子,担心原作者删除,就copy下来供大家学习。对于学习时间日期这一部分真的非常非常有帮助,无论是方法还是类别,都写的非常详细,赞一个!
转载自:&&&& 地址:
主要有以下类:
NSDate -- 表示一个绝对的时间点
NSTimeZone -- 时区信息
NSLocale -- 本地化信息
NSDateComponents -- 一个封装了具体年月日、时秒分、周、季度等的类
NSCalendar -- 日历类,它提供了大部分的日期计算接口,并且允许您在NSDate和NSDateComponents之间转换
NSDateFormatter -- 用来在日期和字符串之间转换
NSDate用来表示公历的GMT时间(&#26684;林威治时间)。 有下面几种初始化方法:
1. - (id)init
默认初始化,返回当前时间,也可以直接调用类方法 &#43;(id)date
NSDate *date = [[NSDate alloc] init];
//NSDate *date = [NSDate date];
NSLog(@&print date is %@&,date);
将打印出计算机当前时间: 08:57:20 &#43;0000
2. - (id)initWithTimeIntervalSinceNow:(NSTimeInterval)seconds
以当前时间的偏移秒数来初始化,也可以直接调用类方法 &#43; (id)dateWithTimeIntervalSinceNow:(NSTimeInterval)seconds
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow:<span style="color:#];
//NSDate *date = [NSDate dateWithTimeIntervalSinceNow:20];
NSLog(@&print date is %@&,date);
假如当前时间是 08:57:20 &#43;0000,那么初始化后得到的时间是 08:57:40 &#43;0000
3. - (id)initWithTimeIntervalSince1970:(NSTimeInterval)seconds
以GMT时间的偏移秒数来初始化,也可以直接调用类方法 &#43; (id)dateWithTimeIntervalSince1970:(NSTimeInterval)seconds
NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:-<span style="color:#];
//NSDate *date = [NSDate dateWithTimeIntervalSince1970:-20];
NSLog(@&print date is %@&,date);
得到的时间是&#26684;林威治时间往前20秒,将打印出: 23:59:40 &#43;0000
4. - (id)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
以 0:0:0的偏移秒数来初始化,也可以直接调用类方法 &#43; (id)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)seconds
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:<span style="color:#];
//NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:80];
NSLog(@&print date is %@&,date);
将打印出: 00:01:20 &#43;0000
5. - (id)initWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)refDate
以基准时间的偏移秒数来初始化,也可以直接调用类方法 &#43; (id)dateWithTimeInterval:(NSTimeInterval)seconds sinceDate:(NSDate *)date
NSDate *date1 = [[NSDate alloc] initWithTimeIntervalSinceReferenceDate:<span style="color:#];
NSLog(@&print date1 is %@&,date1);
NSDate *date2 = [[NSDate alloc] initWithTimeInterval:<span style="color:# sinceDate:date1];
//NSDate *date2 = [NSDate dateWithTimeInterval:10 sinceDate:date1];
NSLog(@&print date2 is %@&,date2);
第一个基准时间是 00:00:20 &#43;0000,根据基准时间偏移10秒的结果是 00:00:30 &#43;0000
6.& &#43; (id)distantPast
与 &#43; (id)distantFuture
这两个是类方法,分别用来返回一个极早的时间点和一个极晚的时间点
NSDate *date = [NSDate distantFuture];
NSLog(@&future date is %@&,date);
NSDate *date2 = [NSDate distantPast];
NSLog(@&past date is %@&,date2);
distantPast将返回: 00:00:00 &#43;0000,distantFuture将返回: 00:00:00 &#43;0000
NSDate的常用对象方法:
1. -(id)dateByAddingTimeInterval:(NSTimeInterval)seconds
返回以当前NSDate对象为基准,偏移多少秒后得到的新NSDate对象。(旧方法 - (id)addTimeInterval:(NSTimeInterval)seconds已被弃用)
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSDate *date2 = [date dateByAddingTimeInterval:-<span style="color:#];
NSLog(@&%@&,date2);
2. - (BOOL)isEqualToDate:(NSDate *)anotherDate
将当前对象与参数传递的对象进行比较,根据是否相同返回BOOL&#20540;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSDate *date2 = [NSDate dateWithTimeInterval:<span style="color:# sinceDate:date];
BOOL isEqual = [date isEqualToDate:date2];
NSLog(@&%i&,isEqual);
3. - (NSDate *)earlierDate:(NSDate *)anotherDate 与 - (NSDate *)laterDate:(NSDate *)anotherDate
比较两个NSDate对象,返回较早/较晚的时间点,并以新NSDate对象的形式返回
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSDate *date2 = [NSDate dateWithTimeInterval:-<span style="color:# sinceDate:date];
NSDate *date3 = [date earlierDate:date2];
NSLog(@&earlier date is %@&,date3);
NSDate *date4 = [date laterDate:date2];
NSLog(@&later date is %@&,date4);
4. - (NSComparisonResult)compare:(NSDate *)anotherDate
将当前对象与参数传递的对象进行比较,如果相同,返回0(NSOrderedSame);对象时间早于参数时间,返回-1(NSOrderedAscending);对象时间晚于参数时间,返回1(NSOrderedDescending)
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSDate *date2 = [NSDate dateWithTimeInterval:-<span style="color:# sinceDate:date];
NSInteger result = [date compare:date2];
NSLog(@&%i&,result);
5. - (NSTimeInterval)timeIntervalSince1970
返回当前对象时间与 0:0:0的相隔秒数,也可以这样理解:从 0:0:0开始,经过多少秒到达对象指定时间。
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSInteger seconds = [date timeIntervalSince1970];
NSLog(@&%i&,seconds);
将返回结果50
6. - (NSTimeInterval)timeIntervalSinceReferenceDate
返回当前对象时间与 0:0:0的相隔秒数,也可以这样理解:从 0:0:0开始,经过多少秒到达对象指定时间。
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:-<span style="color:#];
NSInteger seconds = [date timeIntervalSinceReferenceDate];
NSLog(@&%i&,seconds);
将返回结果-30,负数代表从 0:0:0开始,倒退30秒到达当前时间。
7. - (NSTimeInterval)timeIntervalSinceNow
返回当前对象时间与客户端时间的相隔秒数,也可以这样理解:从客户端当前时间开始,经过多少秒到达对象指定时间。
NSDate *date = [NSDate dateWithTimeIntervalSinceNow:<span style="color:#0];
NSInteger seconds = [date timeIntervalSinceNow];
NSLog(@&%i&,seconds);
经测试返回了结果99,但初始化时提供的参数是100。这可能是因为第一句初始化代码到第二句计算代码之间有个1秒内的延时,所以计算时的客户端时间比初始化时的客户端时间快了1秒。
8. - (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate
返回当前对象时间与参数传递的对象时间的相隔秒数,也可以这样理解:从参数时间开始,经过多少秒到达对象执行时间。
NSDate *date = [NSDate dateWithTimeIntervalSince1970:<span style="color:#];
NSDate *date2 = [NSDate dateWithTimeInterval:<span style="color:# sinceDate:date];
NSInteger seconds = [date timeIntervalSinceDate:date2];
NSLog(@&%i&,seconds);
将返回结果-50,date为 0:0:0,date2为 0:0:50,从date2的时间开始,倒退50秒到达date的时间。
NSTimeZone
NSTimeZone表示时区信息。 有下面几种初始化方法:
1. &#43; (id)timeZoneWithName:(NSString *)aTimeZoneName / - (id)initWithName:(NSString *)aName
根据时区名称初始化。可以调用NSTimeZone的类方法 &#43; (NSArray *)knownTimeZoneNames来返回所有已知的时区名称。
NSTimeZone *zone = [[NSTimeZone alloc] initWithName:@&America/Chicago&];
//NSTimeZone *zone = [NSTimeZone timeZoneWithName:@&America/Chicago&];
NSLog(@&%@&,zone);
打印出:America/Chicago (CST) offset -21600
2. &#43; (id)timeZoneWithAbbreviation:(NSString *)abbreviation
根据时区缩写初始化。例如:EST(美国东部标准时间)、HKT(香港标准时间)
NSTimeZone *zone = [NSTimeZone timeZoneWithAbbreviation:@&EST&];
NSLog(@&%@&,zone);
打印出:Asia/Hong_Kong (HKT) offset 28800
3. &#43; (NSTimeZone *)systemTimeZone
返回系统时区
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSLog(@&%@&,zone);
假如时区是上海,打印出的时区信息将会是:Asia/Shanghai (CST (China)) offset 28800,28800代表相对于GMT时间偏移的秒数,即8个小时。(8*60*60)
4. &#43; (NSTimeZone *)localTimeZone
返回本地时区,与systemTimeZone的区别在于:本地时区可以被修改,而系统时区不能修改。
[NSTimeZone setDefaultTimeZone:[[NSTimeZone alloc] initWithName:@&America/Chicago&]];
NSTimeZone *systemZone = [NSTimeZone systemTimeZone];
NSTimeZone *localZone = [NSTimeZone localTimeZone];
NSLog(@&%@&,systemZone);
NSLog(@&%@&,localZone);
打印出的系统时区仍然是:Asia/Shanghai (CST (China)) offset 28800;而本地时区经过修改后,变成了:Local Time Zone (America/Chicago (CST) offset -21600)
5. &#43; (id)timeZoneForSecondsFromGMT:(NSInteger)seconds
根据零时区的秒数偏移返回一个新时区对象
NSTimeZone *zone = [NSTimeZone timeZoneForSecondsFromGMT:<span style="color:#800];
NSLog(@&%@&,zone);
打印出:GMT&#43;0800 (GMT&#43;08:00) offset 28800
NSTimeZone常用对象方法与类方法:
1. &#43; (NSArray *)knownTimeZoneNames
以数组的形式返回所有已知的时区名称
NSArray *zoneArray = [NSTimeZone knownTimeZoneNames];
for(NSString *str in zoneArray)
NSLog(@&%@&,str);
2. - (NSString *)name / - (NSString *)abbreviation
返回时区对象的名称或缩写
NSTimeZone *zone = [NSTimeZone localTimeZone];
NSString *strZoneName = [zone name];
NSString *strZoneAbbreviation = [zone abbreviation];
NSLog(@&name is %@&,strZoneName);
NSLog(@&abbreviation is %@&,strZoneAbbreviation);
name is Asia/Hong_Kong
abbreviation is HKT
3. - (NSInteger)secondsFromGMT
得到当前时区与零时区的间隔秒数
NSTimeZone *zone = [NSTimeZone localTimeZone];
int seconds = [zone secondsFromGMT];
NSLog(@&%i&,seconds);
NSLoale类返回本地化信息,主要体现在&语言&和&区域&#26684;式&这两个设置项。有下面几种初始化方法:
1. &#43; (id)systemLocale
返回系统初始本地化信息
NSLocale *locale = [NSLocale systemLocale];
NSLog(@&%@&,[[locale objectForKey:NSLocaleCalendar] calendarIdentifier]);
2. &#43; (id)currentLocale / &#43; (id)autoupdatingCurrentLocale
这两个类方法都将返回当前客户端的本地化信息,区别在于:currentLocale取得的&#20540;会一直保持在cache中,第一次用此方法实例化对象后,即使修改了本地化设定,这个对象也不会改变。而使用autoupdatingCurrentLocale,当每次修改本地化设定,其实例化的对象也会随之改变。
下面的代码演示了区别所在,假设初始本地化信息为en_US,先用这两个函数分别初始化两个对象,然后修改本地化设定语言为台湾繁体中文,再重新打印这两个对象的信息:
NSLocale *locale1;
NSLocale *locale2;
- (IBAction)doTest:(id)sender
locale1 = [NSLocale currentLocale];
locale2 = [NSLocale autoupdatingCurrentLocale];
NSLog(@&%@&,locale1.localeIdentifier); //print &en_US&
NSLog(@&%@&,locale2.localeIdentifier); //print &en_US&
- (IBAction)doAgain:(id)sender
NSLog(@&%@&,locale1.localeIdentifier); //print &en_US&
NSLog(@&%@&,locale2.localeIdentifier); //print &zh_TW&
3. - (id)initWithLocaleIdentifier:(NSString *)string
用标示符初始化本地化信息
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@&zh_CN&];
NSString *strSymbol = [locale objectForKey:NSLocaleCurrencySymbol];
NSLog(@&%@&,strSymbol);
代码用&zh_CN&来初始化对象,然后再打印出对象的货币符号,得到的结果是人民币符号¥
NSLoale常用对象方法与类方法:
1. - (id)objectForKey:(id)key
根据不同的key返回各种本地化信息,例如下面的代码返回了当前货币符号:
NSLocale *locale = [NSLocale currentLocale];
NSString *strSymbol = [locale objectForKey:NSLocaleCurrencySymbol];
NSCalendar *calendar = [[NSLocale currentLocale] objectForKey:NSLocaleCalendar];
2. - (NSString *)displayNameForKey:(id)key value:(id)value
显示特定地区代号下相应键的显示名称:
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@&zh_CN&];
NSString *str = [locale displayNameForKey:NSLocaleIdentifier value:@&en_US&];
NSLog(@&%@&,str);
第一句代码代表以中文来实例化对象,然后得到&en_US&的NSLocaleIdentifier键的显示名称。最后输出的结果是&英文(美国)&
NSDateComponents
NSDateComponents封装了具体年月日、时秒分、周、季度等
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setEra:<span style="color:#];
[compt setYear:<span style="color:#13];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
[compt setHour:<span style="color:#];
[compt setMinute:<span style="color:#];
[compt setSecond:<span style="color:#];
[compt setQuarter:<span style="color:#];
[compt setTimeZone:[NSTimeZone systemTimeZone]];
[compt setWeek:<span style="color:#];
[compt setWeekday:<span style="color:#];
[compt setWeekOfMonth:<span style="color:#];
[compt setWeekOfYear:<span style="color:#];
[compt setCalendar:[NSCalendar currentCalendar]];
NSDateComponents相关方法:
1. NSCalendar对象的 - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)date
取得一个NSDate对象的1个或多个部分,用NSDateComponents来封装
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
//NSDateComponents *compt = [calendar components:NSDayCalendarUnit fromDate:date];
NSDateComponents *compt = [calendar components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit) fromDate:date];
NSLog(@&%d,%@&,[compt year],date);
NSLog(@&%d,%@&,[compt month],date);
NSLog(@&%d,%@&,[compt day],date);
需要注意的是,只有明确指定了unitFlags,NSDateComponents相应的那一部分才有&#20540;。
2. NSCalendar对象的 - (NSDateComponents *)components:(NSUInteger)unitFlags fromDate:(NSDate *)startingDate toDate:(NSDate *)resultDate options
: (NSUInteger)opts
取得两个NSDate对象的时间间隔,用NSDateComponents来封装
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
NSDate *date2 = [NSDate dateWithTimeInterval:<span style="color:#*<span style="color:#*<span style="color:#&#43;<span style="color:# sinceDate:date];
NSDateComponents *compt = [calendar components:(NSMinuteCalendarUnit|NSSecondCalendarUnit) fromDate:date toDate:date2 options:<span style="color:#];
NSLog(@&%d&,[compt minute]);
NSLog(@&%d&,[compt second]);
有几点需要注意:
① 得到的NSDateComponents对象可能会包含负数。例如:当toDate比fromDate晚10秒,second部分返回10;当toDate比fromDate早10秒,second部分返回-10
② 当指定unitFlags返回多个部分时,相隔的时间由多个部分共同组成(而不是独立去表示)。例如:上面的例子时间相差5小时1分15秒,如果指定只返回second部分,将得到18075秒;如果指定返回minute和second部分,将得到301分15秒;如果指定返回hour、minute和second,将得到5小时1分15秒。
3. NSCalendar对象的 - (NSDate *)dateFromComponents:(NSDateComponents *)comps
根据NSDateComponents对象得到一个NSDate对象
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:<span style="color:#12];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//得到本地时间,避免时区问题
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSLog(@&%@&,localeDate);
4. NSCalendar对象的 - (NSDate *)dateByAddingComponents:(NSDateComponents *)comps toDate:(NSDate *)date options:(NSUInteger)opts
在参数date基础上,增加一个NSDateComponents类型的时间增量
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setDay:<span style="color:#];
[compt setHour:<span style="color:#];
[compt setMinute:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateByAddingComponents:compt toDate:[NSDate date] options:<span style="color:#];
//得到本地时间,避免时区问题
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSLog(@&%@&,localeDate);
当前时间的基础上,增加25天4小时66秒
NSCalendar
1. &#43; (id)currentCalendar / &#43; (id)autoupdatingCurrentCalendar
这两个类方法都将返回当前客户端的逻辑日历,区别在于:currentCalendar取得的&#20540;会一直保持在cache中,第一次用此方法实例化对象后,即使修改了系统日历设定,这个对象也不会改变。而使用autoupdatingCurrentCalendar,当每次修改系统日历设定,其实例化的对象也会随之改变。
下面的代码演示了区别所在,假设初始Calendar设定为NSGregorianCalendar(公历),先用这两个函数分别初始化两个对象,然后修改系统日历为NSJapaneseCalendar(日本和历),再重新打印这两个对象的信息:
NSCalendar *
NSCalendar *calendar2;
- (IBAction)doTest:(id)sender
calendar = [NSCalendar currentCalendar];
calendar2 = [NSCalendar autoupdatingCurrentCalendar];
NSLog(@&%@&,calendar.calendarIdentifier); //print &gregorian&
NSLog(@&%@&,calendar2.calendarIdentifier); //print &gregorian&
- (IBAction)doAgain:(id)sender
NSLog(@&%@&,calendar.calendarIdentifier); //print &gregorian&
NSLog(@&%@&,calendar2.calendarIdentifier); //print &japanese&
2. - (id)initWithCalendarIdentifier:(NSString *)string
根据提供的日历标示符初始化
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSChineseCalendar];
NSLog(@&%@&,calendar.calendarIdentifier);
系统中定义的日历有:
NSGregorianCalendar -- 公历
NSBuddhistCalendar -- 佛教日历
NSChineseCalendar -- 中国农历
NSHebrewCalendar -- 希伯来日历
NSIslamicCalendar -- 伊斯兰历
NSIslamicCivilCalendar -- 伊斯兰教日历
NSJapaneseCalendar -- 日本日历
NSRepublicOfChinaCalendar -- 中华民国日历(台湾)
NSPersianCalendar -- 波斯历
NSIndianCalendar -- 印度日历
NSISO8601Calendar -- ISO8601
NSCalendar常用对象方法与类方法:
1. - (void)setLocale:(NSLocale *)locale
设置本地化信息
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@&zh_CN&]];
NSLog(@&%@&,calendar.locale.localeIdentifier);
2. - (void)setTimeZone:(NSTimeZone *)tz
设置时区信息
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@&HKT&]];
NSLog(@&%@&,calendar.timeZone);
3. - (void)setFirstWeekday:(NSUInteger)weekday
设置每周的第一天从星期几开始,比如:1代表星期日开始,2代表星期一开始,以此类推。默认&#20540;是1
如图所示,如果从星期天开始,日历的表现形式:
如果从星期二开始,日历的表现形式:
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:<span style="color:#];
NSLog(@&%i&,calendar.firstWeekday);
4. - (void)setMinimumDaysInFirstWeek:(NSUInteger)mdw
设置每年及每月第一周必须包含的最少天数,比如:设定第一周最少包括3天,则value传入3
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setMinimumDaysInFirstWeek:<span style="color:#];
NSLog(@&%i&,calendar.minimumDaysInFirstWeek);
5. - (NSUInteger)ordinalityOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
获取一个小的单位在一个大的单位里面的序数
NSCalendarUnit包含的&#20540;有:
NSEraCalendarUnit -- 纪元单位。对于NSGregorianCalendar(公历)来说,只有公元前(BC)和公元(AD);而对于其它历法可能有很多,例如日本和历是以每一代君王统治来做计算。
NSYearCalendarUnit -- 年单位。&#20540;很大,相当于经历了多少年,未来多少年。
NSMonthCalendarUnit -- 月单位。范围为1-12
NSDayCalendarUnit -- 天单位。范围为1-31
NSHourCalendarUnit -- 小时单位。范围为0-24
NSMinuteCalendarUnit -- 分钟单位。范围为0-60
NSSecondCalendarUnit -- 秒单位。范围为0-60
NSWeekCalendarUnit -- 周单位。范围为1-53
NSWeekdayCalendarUnit -- 星期单位,每周的7天。范围为1-7
NSWeekdayOrdinalCalendarUnit -- 没完全搞清楚
NSQuarterCalendarUnit -- 几刻钟,也就是15分钟。范围为1-4
NSWeekOfMonthCalendarUnit -- 月包含的周数。最多为6个周
NSWeekOfYearCalendarUnit -- 年包含的周数。最多为53个周
NSYearForWeekOfYearCalendarUnit -- 没完全搞清楚
NSTimeZoneCalendarUnit -- 没完全搞清楚
下面是一些示例:
① 当小单位为NSWeekdayCalendarUnit,大单位为NSWeekCalendarUnit时(即某个日期在这一周是第几天),根据firstWeekday属性不同,返回的结果也不同。
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:<span style="color:#];
//[calendar setFirstWeekday:2];
int count = [calendar ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date];
NSLog(@&%d&,count);
默认firstWeekday为1(星期天开始)的情况下,得到的结果是2,从下图可以看到是第2天。
假如firstWeekday被设置为2(星期一开始)的情况下,得到的结果是1,从下图可以看到是第1天
② 当小单位为NSWeekCalendarUnit,大单位为NSYearCalendarUnit时(即某个日期在这一年中是第几周),根据minimumDaysInFirstWeek属性不同,返回的结果也不同。
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:<span style="color:#13];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//[calendar setMinimumDaysInFirstWeek:6];
int count = [calendar ordinalityOfUnit:NSWeekCalendarUnit inUnit:NSYearCalendarUnit forDate:date];
NSLog(@&%d&,count);
从上图的日历中可以看出,在没有设置minimumDaysInFirstWeek的情况下,1月20日得到的结果是4(第四个周)。
默认情况下第一个周有5天,如果将minimumDaysInFirstWeek设置为6天,则原本是第一周的1月1日--1月5日被划分到了上一年,返回0;而1月6日--1月12日升为第一周,1月13日--1月19日升为第二周。。依此类推。
所以需要关注的是minimumDaysInFirstWeek与实际第一周包含天数的大小比较,如果提供的minimumDaysInFirstWeek比实际第一周的天数小,则一切不变;否则统计&一年中第几周&、&一个月中第几周&会产生变化。
6. - (NSRange)rangeOfUnit:(NSCalendarUnit)smaller inUnit:(NSCalendarUnit)larger forDate:(NSDate *)date
根据参数提供的时间点,得到一个小的单位在一个大的单位里面的取&#20540;范围
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:<span style="color:#13];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
[compt setHour:<span style="color:#];
[compt setMinute:<span style="color:#];
[compt setSecond:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
//得到本地时间,避免时区问题
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:date];
NSDate *localeDate = [date dateByAddingTimeInterval:interval];
NSRange range = [calendar rangeOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:localeDate];
NSLog(@&%d -- %d&,range.location,range.length);
调用这个方法要明确一点,取得的是&范围&而不是&包含&,下面是一些例子:
① 小单位是NSDayCalendarUnit,大单位是NSYearCalendarUnit,并不是要取这一年包含多少天,而是要取&天&(Day)这个单位在这一年(Year)的取&#20540;范围。其实不管你提供的日期是多少,返回的&#20540;都是&1--31&。
② 小单位是NSDayCalendarUnit,大单位是NSMonthCalendarUnit。要取得参数时间点所对应的月份下,&天&(Day)的取&#20540;范围。根据参数时间的月份不同,&#20540;也不同。例如2月是1--28、3月是1--31、4月是1--30。
③ 小单位是NSWeekCalendarUnit,大单位是NSMonthCalendarUnit。要取得参数时间点所对应的月份下,&周&(Week)的取&#20540;范围。需要注意的是结果会受到minimumDaysInFirstWeek属性的影响。在默认minimumDaysInFirstWeek情况下,取得的范围&#20540;一般是&1--5&,从日历上可以看出来这个月包含5排,即5个周。
④ 小单位是NSDayCalendarUnit,大单位是NSWeekCalendarUnit。要取得周所包含的&天&(Day)的取&#20540;范围。下面是一个示例日历图:
在上图的日期条件下,假如提供的参数是4月1日--4月6日,那么对应的week就是1(第一个周),可以看到第一个周包含有6天,从1号开始,那么最终得到的范围&#20540;为1--6。
假如提供的参数是4月18日,那么对应的week是3(第三个周),第三个周包含有7天,从14号开始,那么最终得到的范围&#20540;是14--7。
假如提供的参数是4月30日,那么对应的week是5(第五个周),第五个周只包含3天,从28号开始,那么最终得到的范围&#20540;是28--3。
7. - (BOOL)rangeOfUnit:(NSCalendarUnit)unit startDate:(NSDate **)datep interval:(NSTimeInterval *)tip forDate:(NSDate *)date
根据参数提供的时间点,返回所在日历单位的开始时间。如果startDate和interval均可以计算,则返回YES;否则返回NO
unit -- 日历单位
datep -- 开始时间,通过参数返回
tip -- 日历单位所对应的秒数,通过参数返回
date -- 时间点参数
NSDate *dateOut =
NSTimeInterval count = <span style="color:#;
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:<span style="color:#13];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [calendar dateFromComponents:compt];
BOOL b = [calendar rangeOfUnit:NSMonthCalendarUnit startDate:&dateOut interval:&count forDate:date];
//得到本地时间,避免时区问题
NSTimeZone *zone = [NSTimeZone systemTimeZone];
NSInteger interval = [zone secondsFromGMTForDate:dateOut];
NSDate *localeDate = [dateOut dateByAddingTimeInterval:interval];
NSLog(@&%@&,localeDate);
NSLog(@&%f&,count);
NSLog(@&无法计算&);
上面的例子要求返回日当月的起始时间,以及当月的秒数。得到的结果是: 00:00:00 &#43;0。(2678400 = 31天 * 24小时 * 60分 * 60秒)。
假如将上面的日历单位改为NSWeekCalendarUnit,那么得到的结果是: 00:00:00 &#43;。当周的第一天是3月17日。(604800 = 7天 * 24小时 * 60分 * 60秒)。
假如将上面的日历单位改为NSYearCalendarUnit,那么得到的结果是: 00:00:00 &#43;00。这一年的第一天是1月1日,( =365天 * 24小时 * 60分 * 60秒)。
NSDateFormatter
NSDateFormatter的日期&#26684;式如下:
一般会显示公元前(BC)和公元(AD)
假如是2013年,那么yyyy=2013,yy=13 &
假如是3月,那么M=3,MM=03,MMM=Mar,MMMM=March
假如是11月,那么M=11,MM=11,MMM=Nov,MMMM=November
w -- 年包含的周
假如是1月8日,那么w=2(这一年的第二个周)
W -- 月份包含的周(与日历排列有关)
假如是日,那么W=4(这个月的第四个周)
F -- 月份包含的周(与日历排列无关)
和上面的W不一样,F只是单纯以7天为一个单位来统计周,例如7号一定是第一个周,15号一定是第三个周,与日历排列无关。
D -- 年包含的天数
假如是1月20日,那么D=20(这一年的第20天)
假如是2月25日,那么D=31&#43;25=56(这一年的第56天)
d -- 月份包含的天数
假如是5号,那么d=5,dd=05
假如是15号,那么d=15,dd=15
E -- 星期&
假如是星期五,那么E=Fri,EEEE=Friday
a -- 上午(AM)/下午(PM)
H -- 24小时制,显示为0--23
假如是午夜00:40,那么H=0:40,HH=00:40
h -- 12小时制,显示为1--12
假如是午夜00:40,那么h=12:40
K -- 12小时制,显示为0--11
假如是午夜00:40,那么K=0:40,KK=00:40
k -- 24小时制,显示为1--24
假如是午夜00:40,那么k=24:40
假如是5分钟,那么m=5,mm=05
假如是45分钟,那么m=45,mm=45
假如是5秒钟,那么s=5,ss=05
假如是45秒钟,那么s=45,ss=45
一般用SSS来显示
表现形式为GMT&#43;08:00
表现形式为&#43;0800
NSDateFormatter的两个最实用的方法是dateFromString和stringFromDate,前者将一个字符串经过&#26684;式化后变成NSDate对象,后者将NSDate对象&#26684;式化成字符串。
在调用setDateFormat设置&#26684;式化字符串时,可以加入一些别的字符串,用单引号来引入,例如:
[formatter setDateFormat:@&yyyy-MM-dd 'some ''special'' string' HH:mm:ss&];
使用NSDateFormatter转换时间字符串时,默认的时区是系统时区,例如在中国一般都是北京时间(&#43;8),如果直接转换会导致结果相差8小时,所以一般的做法是先指定时区为GMT标准时间再转换,例如:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:<span style="color:#]];
[formatter setDateFormat:@&yyyy-MM-dd HH:mm:ss z&];
NSDateComponents *compt = [[NSDateComponents alloc] init];
[compt setYear:<span style="color:#13];
[compt setMonth:<span style="color:#];
[compt setDay:<span style="color:#];
[compt setHour:<span style="color:#];
[compt setMinute:<span style="color:#];
[compt setSecond:<span style="color:#];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:<span style="color:#]];
NSDate *date = [calendar dateFromComponents:compt];
NSLog(@&%@&,date);
NSString *str = [formatter stringFromDate:date];
NSLog(@&%@&,str);
排名:第4526名
(81)(26)(45)(62)(11)(3)(10)(12)(1)(6)(2)(4)(4)(5)(1)(3)(2)(1)

我要回帖

更多关于 大功率拉杆音箱功放板 的文章

 

随机推荐