Александр Додатко - Работа с датами в objectivec и sqlite

42
Dodatko Alexander November 2012

Upload: ua-mobile

Post on 15-May-2015

477 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Dodatko Alexander

November 2012

Page 2: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 3: Александр Додатко - Работа с датами в ObjectiveC и SQLite

How many months does the year consist of?

Page 4: Александр Додатко - Работа с датами в ObjectiveC и SQLite

What is the first day of the year?

Page 5: Александр Додатко - Работа с датами в ObjectiveC и SQLite

What day does a new week start on?

Page 6: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Right, but did you know that ...

Page 7: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Jewish calendar consists of 13 months. And month #6 is a

leaping one.

Page 8: Александр Додатко - Работа с датами в ObjectiveC и SQLite

In Japan the calendar may return to year #1 at the day of

the emperor's death

Page 9: Александр Додатко - Работа с датами в ObjectiveC и SQLite

In Russia week starts on Monday.

In the USA the first day is Sunday

Page 10: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 11: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Dates must look in the way the user expects

Page 12: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 13: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 14: Александр Додатко - Работа с датами в ObjectiveC и SQLite

-(NSDate*)parseDate:( NSString* )date_{ NSDateFormatter* df_ = [ NSDateFormatter new ]; df_.dateFormat = @"yyyy-MM-dd"; return [ df_ dateFromString: date_ ];}

The Typical Solution

Page 15: Александр Додатко - Работа с датами в ObjectiveC и SQLite

-(NSDate*)parseDate:( NSString* )date_{ NSDateFormatter* df_ = [ NSDateFormatter new ]; df_.dateFormat = @"yyyy-MM-dd"; return [ df_ dateFromString: date_ ];}

WRONG !

Page 16: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 17: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Use en_US_POSIX locale for dates from the network

Use Gregorian calendar too

Page 18: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 19: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Do not forget to set the same Locale

for both NSCalendar and NSDateFormatter

Page 20: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Or let my library do it for you

dodikk / ESLocale

Page 21: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Ok. How about SQLite?

Page 22: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 23: Александр Додатко - Работа с датами в ObjectiveC и SQLite

SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY week

Page 24: Александр Додатко - Работа с датами в ObjectiveC и SQLite

What should I take as week ?

Page 25: Александр Додатко - Работа с датами в ObjectiveC и SQLite

SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY

Strftime('%Y-%W', Date )

Page 26: Александр Додатко - Работа с датами в ObjectiveC и SQLite

SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY

Strftime('%Y-%W', Date )

Page 27: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 28: Александр Додатко - Работа с датами в ObjectiveC и SQLite

SELECT SUM( Visits)FROM VisitsLogWHERE Date BETWEEN x AND yGROUP BY

ObjcFormatDate('YYYY-ww', Date, 'en_US_POSIX' )

Page 29: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 30: Александр Додатко - Работа с датами в ObjectiveC и SQLite

int sqlite3_create_function( dbHandle, "ObjcFormatDate", 3, //int nArg, SQLITE_UTF8, NULL, // sqlite user data functionPointer, NULL, NULL // for aggregates);

Page 31: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Plan of attack

Convert C strings to NSString

Convert date string to NSDate

Format NSDate using locale

Page 32: Александр Додатко - Работа с датами в ObjectiveC и SQLite

SQLite uses ANSI format

yyyy-MM-dd

Page 33: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Demo

Page 34: Александр Додатко - Работа с датами в ObjectiveC и SQLite

One More Thing

Page 35: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 36: Александр Додатко - Работа с датами в ObjectiveC и SQLite

1000 times slower than strftime

10K records

Creating NSDateFormatter on-the-fly

Page 37: Александр Додатко - Работа с датами в ObjectiveC и SQLite
Page 38: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Same speed as strftime

Same 10K records

Singletone NSDateFormatter

Page 39: Александр Додатко - Работа с датами в ObjectiveC и SQLite

Thread Safety

Page 40: Александр Додатко - Работа с датами в ObjectiveC и SQLite

dodikk / ESLocale

Page 41: Александр Додатко - Работа с датами в ObjectiveC и SQLite

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