表題の通りです。結構忘れるのに、調べるのにおもったより時間がかかるので。
また、日付操作の区分けをわたしがわかりやすいように
言語でまとめる前に、VBAでどうしたいかを列挙。
あとで他の言語ををまとめてみます。
列挙の前に前提です。
前提
プログラムで扱う際に日付は4つの種類に分けられるとします。
命名は私の勝手な名前付け。そのうち変更するかもです
Date型
一番よく使います。これの出しやすさがその言語の日付の
使いやすさという認識くらいの勢い
英語混じりは不可
2017-04-17 20:52:11
2017/04/17
String型
“2017年4月17日 20時52分11秒”
こっちも英語はだめ。
long型
人間が数字から日付をすぐ読み取れるものだけを言います。
20170417202511
基準値差分(シリアル秒?)
一定の日付時刻を基準としてそこからの経過時間。
言語によって基準時刻が違います。
型としてはlong型。
42842
こんなかんじ。
以下が操作したい内容とVBAでの例です。
Date型現在時刻
Debug.Print Now()
日本語String型現在時刻
debug.print format(Now(),“yyyy年mm月dd日”)
文字列からLongへ変換
Debug.Print Format(Now(), “yyyymmdd”)
Longから文字列へ変換
文字列として扱って、普通に分割結合するしかないようです。
↓みたいにformat使えない。
日本語StringからDate型へ
Debug.Print Format(“2017年4月17日”, “yyyy/mm/dd”)
Date型へ日にちの増減
Debug.Print Now() + 1
Debug.Print Date - 1
Date型へ年月の増減
Debug.Print DateAdd(“yyyy”, 1, Now)
Debug.Print DateAdd(“m”, -1, Now)
月末最終日を取得
Debug.Print DateSerial(Year(Date), Month(Date) + 1, 0)
Debug.Print DateSerial(Year("2017/04/17"), Month("2017/4/17") + 1, 0)
指定日付の曜日
2017/04/17(月)のとき。
Debug.Print Weekday(Now) ‘2
Debug.Print Format(Now, “aaa”) ‘月
日数の差分
Debug.Print DateDiff(“d”, Now, “2017/04/20”)
指定月の日数
最終日付から日にちだけ抜き出しでおっけー。
debug.print Day(DateSerial(Year(Date), Month(Date) + 1, 0))
こんなかんじ!
VBAはシリアル扱うことが私はなかったので省略。
他は使っちゃいそう。できれば避けたいです。