なずブログ

インフラSE、Java開発、リモートワークエンジニアな人のメモ帳

習ったプログラム言語の日付操作をまとめたい~とりあえずVBAでたたき台~

f:id:nazuna_0124:20170312082946p:plain

表題の通りです。結構忘れるのに、調べるのにおもったより時間がかかるので。

また、日付操作の区分けをわたしがわかりやすいように


言語でまとめる前に、VBAでどうしたいかを列挙。

あとで他の言語ををまとめてみます。


習った言語なので対象はjs、phpJAVAになります。


列挙の前に前提です。

前提

プログラムで扱う際に日付は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はシリアル扱うことが私はなかったので省略。

他は使っちゃいそう。できれば避けたいです。