タイトル | : Re: 日付の加算について |
記事No | : 12147 |
投稿日 | : 2024/08/06(Tue) 16:41 |
投稿者 | : 魔界の仮面弁士 |
> Visual Basic 6について VB6 の掲示板はお隣ですよ? ここは VB.NET の掲示板なので、本来は板違いです。
> 2024年08月6日で それは文字列ですか? それとも日付型の値でしょうか。
Format を使うということから、恐らく Date 型の値だとは思いますが、 仮に文字列値だったのだとしたら、何故 「2024年8月6日」や 「2024年08月06日」ではなく、あえて 『2024年08月6日』という中途半端な表記になっているのかが気にかかりました。
> format関数の組み合わせでyymmddにすると240806になりますが > この状態で240807にするには、どのようにプログラムを組めばいいですか? 日付型ならば、 newDate = DateAdd("d", 1, oldDate) もしくは手抜きで newDate = oldDate + 1.0 などとすれば、翌日の日付が得られますよね。
そこから yymmdd = Format$(newDate, "yymmdd") とすれば、"240807" という文字列が得られるでしょう。
文字列ではなく数値として得たい場合は、 yymmdd = CLng(Format$(newDate, "yymmdd")) のようにすればよいかと思います。
> または、240806を20240806に戻す方法があればおしてください。 2 桁年を 4 桁年に変換するためのルールが、 Windows のコントロールパネルの地域設定にある 日付形式オプションにて定められていますので、まずはこれを使ってみましょう。
[2 桁の数字で年を入力すると、次の範囲内での暦年として解釈する] というオプション項目のことです。ここで閾値が定められています。
Win10 や Win11 では、デフォルトの閾値が 1941〜2040 と設定されているため、 DateSerial(14, 8, 6) という式は、2014年8月6日 という日付になり、 DateSerial(24, 8, 6) という式は、2024年8月6日 という日付になり、 DateSerial(34, 8, 6) という式で、2034年8月6日 という日付になります。
Vista や Win7 の頃は、デフォルトの閾値が 1930〜2029 設定ですのでご注意ください。 DateSerial(14, 8, 6) という式は、2014年8月6日 という日付になり、 DateSerial(24, 8, 6) という式は、2024年8月6日 という日付になり、 DateSerial(34, 8, 6) という式で、1934年8月6日 という日付になります。
もしもコントロールパネルで、暦年の閾値を 1921〜2020 と定めたとしたら、 DateSerial(14, 8, 6) という式は、2014年8月6日 という日付になり、 DateSerial(24, 8, 6) という式は、1924年8月6日 という日付になり、 DateSerial(34, 8, 6) という式で、1934年8月6日 という日付になります。
同じ変換式でも、実行環境の設定によって違う日付値に変換されることになるというわけですね。 https://ameblo.jp/pcroom123/entry-11699406525.html
なお、240806 を分解して DateSerial 関数に 24, 8, 6 と渡すのが面倒な場合は、 手抜き手法として、分解せずに CDate(Format(240806, "00/00/00")) という変換を行う手法もあります。 こちらの方法だと、地域依存性が高くなってしまうのが難点ですけれどね。 日本以外では、日付の記述順が yyyy/MM/dd 以外に設定されている環境もありますので…。
もしも 2桁年→4桁年の補正を OS の地域設定に依存させたくない場合は、 4 桁年に戻す処理を自前で実装してあげる必要があるでしょうね。
|