此库包含负责产生正确架构的 NSLocale、NSDateFormatter 和 NSCalendar 对象的辅助类。这些对象是必需的,用于解析来自网络服务的数据,因为当前的区域可能不匹配远程服务的区域。此外,它还包含自定义 SQLite 函数,用于在查询中执行本地化日期计算。
Source Code License : BSD
Supplement materials license : AFL
此库暴露的 API 参考可以在该存储库的 github 页面 中找到。
此库支持所有分发方式
通常,为了解析日期字符串,我们会使用以下代码之类的代码
NSDateFormatter* ansi = [ NSDateFormatter new ];
ansi.dateFormat = @"yyyy-MM-dd"; // ANSI date formatter
NSDate* date = [ ansi dateForString: dateStringFromNetwork ];
如果设备上的区域与后端相同,则这种方法有效。然而,设备上的区域可能会被用户更改。这意味着服务器和解析器上的区域都必须设置为 en_US_POSIX。
对 NSDateFormatter 的正确配置并不像看起来那么简单,需要程序员注意。
NSLocale* posixLocale = [ [ NSLocale alloc ] initWithLocaleIdentifier: @"en_US_POSIX" ];
NSCalendar* gregorianCalendar = [ [ NSCalendar alloc ] initWithCalendarIdentifier: NSGregorianCalendar ];
NSTimeZone* gmtTimezone = [ [ NSTimeZone alloc ] initWithName: @"GMT" ];
[ gregorianCalendar setTimeZone: gmtTimezone ];
[ gregorianCalendar setLocale: posixLocale ];
NSDateFormatter* ansi = [ NSDateFormatter new ];
ansi.calendar = gregorianCalendar;
ansi.locale = posixLocale;
ansi.timeZone = gmtTimeZone;
// Only now we are ready to go
ansi.dateFormat = @"yyyy-MM-dd"; // ANSI date formatter
NSDate* date = [ ansi dateForString: dateStringFromNetwork ];
使用 ESLocale 库,只需一行即可。
NSDateFormatter* ansi = [ ESLocaleFactory ansiDateFormatter ];
// Uses en_US_POSIX locale and ANSI date format
NSDate* date = [ ansi dateForString: dateStringFromNetwork ];
ESLocaleFactory 类自动为任何本地化需求创建日期格式化程序
NSCalendar* russianCalendar = [ ESLocaleFactory gregorianCalendarWithLocaleId: @"ru_RU" ];
NSDateFormatter* russianFormatter = [ NSDateFormatter new ];
[ ESLocaleFactory setCalendar: russianCalendar
forDateFormatter: russianFormatter ];
russianFormatter.dateFormat = @"dd MM yyyy";
// You are ready to use it