Skip to content

Instantly share code, notes, and snippets.

@ctrlcctrlv
Last active August 2, 2022 23:22
Show Gist options
  • Select an option

  • Save ctrlcctrlv/0790c19953e96cbc898ff6c2d9d8685e to your computer and use it in GitHub Desktop.

Select an option

Save ctrlcctrlv/0790c19953e96cbc898ff6c2d9d8685e to your computer and use it in GitHub Desktop.
Current time views (UTC, local) + timezone diff view for SQLite3
DROP VIEW IF EXISTS _dt_time_local;
DROP VIEW IF EXISTS _dt_time_utc;
CREATE VIEW IF NOT EXISTS _dt_time_local AS
SELECT strftime('%s', 'now', 'localtime') Unix,
julianday('now', 'localtime') Julian,
datetime('now', 'localtime') SQL;
CREATE VIEW IF NOT EXISTS _dt_time_utc AS
SELECT strftime('%s', 'now') Unix,
julianday('now') Julian,
datetime('now') SQL;
DROP VIEW IF EXISTS _dt_localtime_utctime_joined;
CREATE VIEW IF NOT EXISTS _dt_localtime_utctime_joined AS
SELECT _dt_time_local.Unix LocalUnix, _dt_time_local.Julian LocalJulian, _dt_time_local.SQL LocalSQL,
_dt_time_utc.Unix UTCUnix, _dt_time_utc.Julian UTCJulian, _dt_time_utc.SQL UTCSQL
FROM _dt_time_local LEFT JOIN _dt_time_utc;
DROP VIEW IF EXISTS _dt_localtime_diff;
CREATE VIEW IF NOT EXISTS _dt_localtime_diff AS
WITH
joined AS (SELECT * FROM _dt_localtime_utctime_joined),
unixdiff AS (SELECT CAST(LocalUnix - UTCUnix AS INTEGER) SecondsDiff FROM joined),
diff AS (SELECT CAST(SecondsDiff AS REAL) SecondsDiff, SecondsDiff / 60.0 MinutesDiff, SecondsDiff / 60.0 / 60.0 HoursDiff FROM unixdiff),
juliandiff AS (SELECT PRINTF("%3g", LocalJulian - UTCJulian) JulianDiff FROM joined),
humandiff AS (SELECT IIF(ABS(LocalUnix - UTCUnix) != LocalUnix - UTCUnix, '-', '') ||
(SELECT PRINTF("%02d:%02d", ABS(HoursDiff), ABS(CAST(HoursDiff AS INTEGER) * 60) - ABS(MinutesDiff))) HumanDiff FROM joined
LEFT JOIN diff)
SELECT SecondsDiff, MinutesDiff, HoursDiff, JulianDiff, HumanDiff
FROM diff
LEFT JOIN juliandiff
LEFT JOIN humandiff;
SELECT * FROM _dt_localtime_diff LEFT JOIN _dt_localtime_utctime_joined;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment