The datetime function always returns GMT time unless you request it to do
something else (for example, asking for a conversion to 'localtime' using the
system c library concept of localtime and timezones -- which will almost always
be incorrect on Windows since it has extremely limited comprehension of
timezones -- being written by such a weeny company that only exists in one
timezone asnd has no customers operating in more than one timezone or for more
than one or two years).
For example:
sqlite> select datetime('2015-01-04 15:35:16.435465 -07:00');
2015-01-04 22:35:16
Notice two things: (1) the output is rounded to the second (2) the string has
no timezone offset (it is naive).
If you need to keep the milliseconds, then you need to use strftime:
sqlite> select strftime('%Y-%m-%d %H:%M:%f','2015-01-04 15:35:16.435465
-07:00');
2015-01-04 22:35:16.435
If you need more than 3 decimal places for seconds, you need to use something
other than the built in functions. Net ever strftime can be coerced into
reporting more than millisecond precision.
Unfortunately, there is no way to solve the second problem -- the string output
from strftime (and its alias functions) is always naive and you have no way of
knowing what the relevant timezone offset is. You can always append the string
'+00:00' to designate GMT, but this will be a PITA if you have to do it all
over the place. For example,
sqlite> select strftime('%Y-%m-%d %H:%M:%f +00:00','2015-01-04 15:35:16.435465
-07:00');
2015-01-04 22:35:16.435 +00:00
You may well be better served using something other than the SQLite builtin
functions to perform date / time manipulations and store only unixepoch or
julianday numbers in the database -- let your application handle the
conversions as close to the user as possible. If someone wants to use the
shell tool and convert them to strings then they can, but they will suffer the
vagaries of interpretation and expression of the results -- the data in the
database will be clear and concise and totally free of interpretational
anomolies.
---
Theory is when you know everything but nothing works. Practice is when
everything works but no one knows why. Sometimes theory and practice are
combined: nothing works and no one knows why.
>-----Original Message-----
>From: [email protected] [mailto:sqlite-users-
>[email protected]] On Behalf Of MikeSnow
>Sent: Wednesday, 7 January, 2015 07:00
>To: [email protected]
>Subject: Re: [sqlite] Time Zone Conversions
>
>I am kind of new at this..... so if I get you, I should concat the 3
>columns
>to get one in the suggested format. But then how do you convert?
>
>"Column_Time"
>2013-10-07 04:23:19.120-04:00
>
> datetime("Column_Time", 'utc')?
>
>
>
>
>
>
>--
>View this message in context: http://sqlite.1065341.n5.nabble.com/Time-
>Zone-Conversions-tp79849p79865.html
>Sent from the SQLite mailing list archive at Nabble.com.
>_______________________________________________
>sqlite-users mailing list
>[email protected]
>http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users