やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3日時関数(date,time,datetime,julianday,strftime)とcurrent_date,current_time,current_timestamp

 日付型はない。文字列。UTC時刻ベース。

成果物

情報源

構文

関数 引数 概要
date (日時テキスト,修飾子,...) YYYY-mm-dd形式。
time (日時テキスト,修飾子,...) HH:MM:SS形式。
datetime (日時テキスト,修飾子,...) YYYY-mm-dd HH:MM:SS
julianday (日時テキスト,修飾子,...) ユリウス日紀元前4714年11月24日(予言グレゴリオ暦)のグリニッジ正午からの日数を返す
strftime (書式子,日時テキスト,修飾子,...) 指定した日時を指定した書式で返す
変数 概要
current_date UTC現在時刻 YYYY-mm-dd
current_time UTC現在時刻 HH:MM:SS
current_timestamp UTC現在時刻 YYYY-mm-dd HH:MM:SS

日時テキスト

  1. YYYY-MM-DD
  2. YYYY-MM-DD HH:MM
  3. YYYY-MM-DD HH:MM:SS
  4. YYYY-MM-DD HH:MM:SS.SSS
  5. YYYY-MM-DDTHH:MM
  6. YYYY-MM-DDTHH:MM:SS
  7. YYYY-MM-DDTHH:MM:SS.SSS
  8. HH:MM
  9. HH:MM:SS
  10. HH:MM:SS.SSS
  11. now
  12. DDDDDDDDDD(エポック時刻)

 なお、以下はすべて同じ。時刻の末尾Z,:00は省略できる。

  • 2013-10-07 08:23:19.120
  • 2013-10-07T08:23:19.120Z
  • 2013-10-07 04:23:19.120-04:00
  • 2456572.84952685

修飾子

  • NNN days
  • NNN hours
  • NNN minutes
  • NNN.NNNN seconds
  • NNN months
  • NNN years
  • start of month
  • start of year
  • start of day
  • weekday N
  • unixepoch
  • localtime
  • utc

 Nは任意の数値。+,-プレフィクスでその値だけ増減させる。

書式子

書式子 意味
%d 日。day of month: 00
%f ミリ秒。fractional seconds: SS.SSS
%H 時間。hour: 00-24
%j 1年における日数。day of year: 001-366
%J Julian day number
%m 月。month: 01-12
%M 分。minute: 00-59
%s epoch秒。seconds since 1970-01-01
%S 秒。seconds。00-59
%w 週。日曜=0。day of week 0-6 with Sunday==0
%W 1年の間における週数。00-53
%Y year。年。0000...9999
%% %

-- 今日(現在日付)
select date('now');
2019-09-12
-- 今月末
select date('now','start of month','+1 month','-1 day');
2019-09-30
-- エポック時刻(UTC)
SELECT datetime(1092941466, 'unixepoch');
2004-08-19 18:51:06
-- エポック時刻(ローカル時刻)
SELECT datetime(1092941466, 'unixepoch', 'localtime');
2004-08-20 03:51:06
-- 現在時刻を取得(エポック時刻)
SELECT strftime('%s','now');
1568259213

-- 米国独立宣言に署名してからの日数
select julianday('now') - julianday('1776-07-04');
88823.1483078818
-- エポック時刻同士での時間差を求める
select strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
495334717
-- 今年の10月の最初の火曜日の日付
select date('now','start of year','+9 months','weekday 2');
2019-10-01
-- UNIXエポックからの時間(秒単位)
select (julianday('now') - 2440587.5)*86400.0;
1568259213.80099

おまけ

Sqlite3.Function.Date.date.time.datetime.julianday.strftime.20190912122442  GitHubにアップロードしたら怒られた。なんとリポジトリ名は100字以内という制限があった。

{
  "message": "Repository creation failed.",
  "errors": [
    {
      "resource": "Repository",
      "code": "custom",
      "field": "name",
      "message": "name is too long (maximum is 100 characters)"
    }
  ],
  "documentation_url": "https://developer.github.com/v3/repos/#create"
}

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで