アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6.0(SP5)のformat関数にて、以下のような場合、異なる結果が帰ってきます。
どのような仕様で結果が異なるのでしょうか?

 Format("20050101-1", "0") → "20050101-1" と帰ってきます。
 Format("20060101-1", "0") → "1528543" と帰ってきます。

分かる方がいらっしゃたら、お願いします。

A 回答 (1件)

興味が湧いたので調べてみました。


"nnnn-1"のような文字列の場合、
"西暦年-月"が指定されたとして、日付として解釈しようとします。
ところで、この時に計算に使用するのは、符号無し2バイト65536以下(0~65535なので正確には未満)の数を使っているようです。
つまり、
20060101年は、65536で割った余り(それ以上の桁はオーバーフローして捨てられます)
6085になり
6085年1月を表す数値(シリアル値)になります。
ところで
20050101の場合、同じく余りが
61621となりますが、
こちらは日付として解釈されません
日付として年が有効なのは
9999年までのようで、
先程の計算の結果が9999を越える結果になる場合、日付として無効であるとしてそのまま文字列として評価されることになります。
    • good
    • 0
この回答へのお礼

お礼が遅くなってすみません。

いろいろ調べていただいてありがとうございました。
エクセルで"1528543"と入力して、日付に書式を変えると"6085/1"と表示され、日付のシリアル値ではないかと推測していましたが、6085年の意味が分かりませんでした。
BLUEPIXYさんの説明で、理解できました。

ありがとうございました。

お礼日時:2006/01/09 21:55

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A