Александр Додатко - Работа с датами в ObjectiveC и SQLite
Transcript of Александр Додатко - Работа с датами в ObjectiveC и SQLite
![Page 1: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/1.jpg)
Dodatko Alexander
November 2012
![Page 2: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/2.jpg)
![Page 3: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/3.jpg)
How many months does the year consist of?
![Page 4: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/4.jpg)
What is the first day of the year?
![Page 5: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/5.jpg)
What day does a new week start on?
![Page 6: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/6.jpg)
Right, but did you know that ...
![Page 7: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/7.jpg)
Jewish calendar consists of 13 months. And month #6 is a
leaping one.
![Page 8: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/8.jpg)
In Japan the calendar may return to year #1 at the day of
the emperor's death
![Page 9: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/9.jpg)
In Russia week starts on Monday.
In the USA the first day is Sunday
![Page 10: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/10.jpg)
![Page 11: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/11.jpg)
Dates must look in the way the user expects
![Page 12: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/12.jpg)
![Page 13: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/13.jpg)
![Page 14: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/14.jpg)
-(NSDate*)parseDate:( NSString* )date_{ NSDateFormatter* df_ = [ NSDateFormatter new ]; df_.dateFormat = @"yyyy-MM-dd"; return [ df_ dateFromString: date_ ];}
The Typical Solution
![Page 15: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/15.jpg)
-(NSDate*)parseDate:( NSString* )date_{ NSDateFormatter* df_ = [ NSDateFormatter new ]; df_.dateFormat = @"yyyy-MM-dd"; return [ df_ dateFromString: date_ ];}
WRONG !
![Page 16: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/16.jpg)
![Page 17: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/17.jpg)
Use en_US_POSIX locale for dates from the network
Use Gregorian calendar too
![Page 18: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/18.jpg)
![Page 19: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/19.jpg)
Do not forget to set the same Locale
for both NSCalendar and NSDateFormatter
![Page 20: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/20.jpg)
Or let my library do it for you
dodikk / ESLocale
![Page 21: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/21.jpg)
Ok. How about SQLite?
![Page 22: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/22.jpg)
![Page 23: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/23.jpg)
SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY week
![Page 24: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/24.jpg)
What should I take as week ?
![Page 25: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/25.jpg)
SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY
Strftime('%Y-%W', Date )
![Page 26: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/26.jpg)
SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY
Strftime('%Y-%W', Date )
![Page 27: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/27.jpg)
![Page 28: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/28.jpg)
SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY
ObjcFormatDate('YYYY-ww', Date, 'en_US_POSIX' )
![Page 29: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/29.jpg)
![Page 30: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/30.jpg)
int sqlite3_create_function( dbHandle, "ObjcFormatDate", 3, //int nArg, SQLITE_UTF8, NULL, // sqlite user data functionPointer, NULL, NULL // for aggregates);
![Page 31: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/31.jpg)
Plan of attack
Convert C strings to NSString
Convert date string to NSDate
Format NSDate using locale
![Page 32: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/32.jpg)
SQLite uses ANSI format
yyyy-MM-dd
![Page 33: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/33.jpg)
Demo
![Page 34: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/34.jpg)
One More Thing
![Page 35: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/35.jpg)
![Page 36: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/36.jpg)
1000 times slower than strftime
10K records
Creating NSDateFormatter on-the-fly
![Page 37: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/37.jpg)
![Page 38: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/38.jpg)
Same speed as strftime
Same 10K records
Singletone NSDateFormatter
![Page 39: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/39.jpg)
Thread Safety
![Page 40: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/40.jpg)
dodikk / ESLocale
![Page 41: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/41.jpg)
Contacts
Oleksandr Dodatko
mail/jabber : [email protected]
Skype : alexander.dodatko.work
Twitter : @dodikk88
Github :
https://github.com/dodikk
https://github.com/EmbeddedSources
![Page 42: Александр Додатко - Работа с датами в ObjectiveC и SQLite](https://reader031.fdocuments.in/reader031/viewer/2022013121/5555bd52d8b42afe5d8b510b/html5/thumbnails/42.jpg)