日付、時間の計算
作者: 小見 拓
—
最終変更
2012年01月08日 12時10分
日付、時間の計算
- localtime()は1970年からの秒を返す。strftime()で文字列表記に変換できる。
:let now = localtime() :echo now "# => 1203574847 :echo strftime("%Y/%m/%d %H:%M:%S", now) "# => 2008/02/21 15:20:47
- 1時間前。
:let hour = (60 * 60) :echo strftime("%Y/%m/%d %H:%M:%S", now - hour) "# => 2008/02/21 14:20:47
- 1日前。
:let day = (60 * 60 * 24) :echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - day) "# => 2008/02/20 15:20:47 (水曜日)
- 31日前。
:let month = (60 * 60 * 24 * 31) :echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - month) "# => 2008/01/21 15:20:47 (月曜日)
- 365日前。
:let year = (60 * 60 * 24 * 365) :echo strftime("%Y/%m/%d %H:%M:%S (%A)", now - year) "# => 2007/02/21 15:20:47 (水曜日)
- 日付から経過秒数をとる(日本時間)。
:function! Localtime(year, month, day, hour, minute, second) " days from 0000/01/01 :let l:year = a:month < 3 ? a:year - 1 : a:year :let l:month = a:month < 3 ? 12 + a:month : a:month :let l:days = 365*l:year + l:year/4 - l:year/100 + l:year/400 + 306*(l:month+1)/10 + a:day - 428 " days from 0000/01/01 to 1970/01/01 " 1970/01/01 == 1969/13/01 :let l:ybase = 1969 :let l:mbase = 13 :let l:dbase = 1 :let l:basedays = 365*l:ybase + l:ybase/4 - l:ybase/100 + l:ybase/400 + 306*(l:mbase+1)/10 + l:dbase - 428 " seconds from 1970/01/01 :return (l:days-l:basedays)*86400 + (a:hour-9)*3600 + a:minute*60 + a:second :endfunction :let ltime = Localtime(2008, 2, 23, 14, 23, 0) :echo ltime :echo strftime("%Y/%m/%d %H:%M:%S (%A)", ltime) "# => 1203744180 "# => 2008/02/23 14:23:00 (土曜日)
- 経過秒数から日付、時間、曜日表示。
:function! Localtime(year, month, day, hour, minute, second) " days from 0000/01/01 :let l:year = a:month < 3 ? a:year - 1 : a:year :let l:month = a:month < 3 ? 12 + a:month : a:month :let l:days = 365*l:year + l:year/4 - l:year/100 + l:year/400 + 306*(l:month+1)/10 + a:day - 428 " days from 0000/01/01 to 1970/01/01 " 1970/01/01 == 1969/13/01 :let l:ybase = 1969 :let l:mbase = 13 :let l:dbase = 1 :let l:basedays = 365*l:ybase + l:ybase/4 - l:ybase/100 + l:ybase/400 + 306*(l:mbase+1)/10 + l:dbase - 428 " seconds from 1970/01/01 :return (l:days-l:basedays)*86400 + (a:hour-9)*3600 + a:minute*60 + a:second :endfunction :let ltime = Localtime(2008, 2, 23, 14, 23, 0) :echo strftime("%Y/%m/%d", ltime) "# => 2008/02/23 :echo strftime("%H:%M:%S", ltime) "# => 14:23:00 :echo strftime("%Y/%m/%d %H:%M:%S", ltime) "# => 2008/02/23 14:23:00 :echo strftime("%B", ltime) "# => 2月 :echo strftime("%b", ltime) "# => 2 :echo strftime("%a", ltime) "# => 土 :echo strftime("%A", ltime) "# => 土曜日
Recent Comments
ありがとうございます!
http://nanasi.jp/articles/howto/editing/visualcursor-endtoend.html · 7 years ago
知りませんでした。有難うございました。
http://nanasi.jp/articles/howto/file/open-with-format.html · 9 years ago
<c-f>1ページ分、下にスクロールする<c-b>1ページ分、上にスクロールする
どっちも逆です。
http://nanasi.jp/articles/howto/user-manual/user-manual-motion.html · 10 years ago
set 使用時に : で閉じるのを忘れて右往左往してました。
http://nanasi.jp/articles/howto/file/modeline.html · 10 years ago
やっぱり日本語の方が早いっす。
http://nanasi.jp/articles/howto/help/help_ja.html · 11 years ago