ESLocale 1.2.1

ESLocale 1.2.1

测试已测试
语言语言 Objective C++Objective C++
许可证 BSD
发布最新发布2014年12月

Alexander Dodatko维护。



ESLocale 1.2.1

  • 作者:
  • Alexander Dodatko

此库包含负责产生正确架构的 NSLocale、NSDateFormatter 和 NSCalendar 对象的辅助类。这些对象是必需的,用于解析来自网络服务的数据,因为当前的区域可能不匹配远程服务的区域。此外,它还包含自定义 SQLite 函数,用于在查询中执行本地化日期计算。

Source Code License          : BSD
Supplement materials license : AFL

文档

此库暴露的 API 参考可以在该存储库的 github 页面 中找到。

分发

此库支持所有分发方式

  • cocoapods
  • iOS 的静态库
  • iOS 的静态框架
  • Carthage 包管理器(自 ESLocale v1.2.1 起支持)

从网络解析日期

通常,为了解析日期字符串,我们会使用以下代码之类的代码

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

Bitdeli Badge