[delphi-users:1122] Delphi2010とStrToDateTime

480 views
Skip to first unread message

サイダー

unread,
May 16, 2010, 10:33:00 PM5/16/10
to delphi...@freeml.com
Delplhi2010の日付文字のパースで質問させて下さい。

var
s:string;
dt :TDateTime;

s := '2010/09/08 12:34:22';

dt := StrToDateTime(s);

これで、dt=1899/12/30 つまり 0 になってしまうのですが、みなさんもそうなんでしょうか?

これを有効に働かせるには、どうしたら良いのでしょうか?

ご存じの方がおられましたら、ご返答宜しくお願いします。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
【無料】freemlのiPhoneアプリができました♪今すぐダウンロード!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwh1U
-----------------------------------------------------[freeml by GMO]--

にゃん

unread,
May 16, 2010, 11:43:41 PM5/16/10
to delphi...@freeml.com
茂木です。

Windowsの日付形式がyyyy/MM/ddになっていないとか?



http://www.kanntann.net/
--------------------------------------
2010 FIFA World Cup News [Yahoo!Sports/sportsnavi]
http://pr.mail.yahoo.co.jp/southafrica2010/


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
PCにもメンバー掲示板ができました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwi8U

DEKO

unread,
May 17, 2010, 12:01:18 AM5/17/10
to delphi...@freeml.com
こんにちは。

> これで、dt=1899/12/30 つまり 0 になってしまうのですが、みなさんもそうなんでしょうか?
当方では正常に動作しています。

> これを有効に働かせるには、どうしたら良いのでしょうか?
文字列から日付時刻型への変換は "地域と言語のオプション" にある
日付/時刻形式文字列に依存しますので、OS の設定に依存しないようにするには

・ShortDateFormat
・ShortTimeFormat
・LongDateFormat
・LongTimeFormat

これらの変数をアプリケーション側で設定します。
http://docwiki.embarcadero.com/VCL/ja/SysUtils#.E5.A4.89.E6.95.B0_2

データ的に様々な日付/時刻文字列を扱う場合には、uses に Variants を追加し、
StrToDateTime() の代わりに VarToDateTime() を使う方が便利な事があります。

--
by DEKO
-------------------------------------
http://homepage1.nifty.com/ht_deko/
ht_...@nifty.com
-------------------------------------


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
共有スケジュールに予定を登録してメンバーに共有しよう♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwiQd

中村@ブレーン

unread,
May 17, 2010, 3:43:34 AM5/17/10
to delphi...@freeml.com
中村です。

0 になるのは変ですね。変換不能だと例外が挙がるはずですが...

それから、Windowsの地域設定ではなくて、特定の日付け形式を使って変換したい場合は、
FormatDateTime が便利です。

FormatDateTime('yyyy/mm/dd hh:nn:ss', s)

こんなかんじです。

サイダー さんは書きました:
>Delplhi2010の日付文字のパースで質問させて下さい。
>
>var
> s:string;
> dt :TDateTime;
>
>s := '2010/09/08 12:34:22';
>
>dt := StrToDateTime(s);
>
>これで、dt=1899/12/30 つまり 0 になってしまうのですが、みなさんもそうなんでしょうか?
>
>これを有効に働かせるには、どうしたら良いのでしょうか?
>

----------
東京都 日野市 中村拓男


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
写メはMLにアップしてみんなと楽しもう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwlGd

サイダー

unread,
May 17, 2010, 6:39:50 AM5/17/10
to delphi...@freeml.com
茂木さん、 DEKOさん、 中村さん ご返答ありがとうございます。

まず、地域設定ですが、
ーー時刻ーー
HH:mm:ss
:
午前
午後

ーー日付ーー
2029まで
西暦日本
短い形式 yyyy/MM/dd
区切り /
長い形式 yyyy'年'MM'月'dd'日'

になっています。


次に以下をテスト

var
s:string;
TmpFormat: TFormatSettings;
dt :TDateTime;
begin
GetLocaleFormatSettings(GetUserDefaultLCID, TmpFormat);
TmpFormat.LongDateFormat := 'yyyy/MM/dd HH:mm:ss';
TmpFormat.ShortDateFormat := 'yyyy/MM/dd';
s := '2010/02/12 10:12:00';
dt := StrToDateTime(s, TmpFormat);


これでも、 dt=0 1899/12/30 になってしまうのです・・・・・


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
【無料】freemlのiPhoneアプリができました♪今すぐダウンロード!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwpqt

p:nine

unread,
May 17, 2010, 6:48:05 AM5/17/10
to delphi...@freeml.com
サイダーさん

お世話になっております。
シリアルゲームズ 細川です。

中村さんも書かれてらっしゃいますが、0になるのはおかしいです。
変換不能だった場合は、例外があがります。

ご参考までに、僕自身は下記のような関数で String→TDateTime 変換をしてい
ます。この関数を使って、失敗したことはありません。

uses
DateUtils;

function String2Date(
iStr: String;
iFormat: String = 'yyyy/mm/dd hh:nn:ss'): TDateTime;
var
KeepShortDateFormat: String;
begin
Result := 0;

if (iStr = '') then
Exit;

KeepShortDateFormat := ShortDateFormat;

ShortDateFormat := iFormat;

if (not TryStrToDateTime(iStr, Result)) then
Result := 0;

ShortDateFormat := KeepShortDateFormat;
end;

よろしくお願いいたします。
Regards,
HOSOKAWA Jun
[S/G] SERIALGAMES Inc.
TEL: 03-5812-0980
FAX: 03-5812-0970
twitter: http://twitter.com/serialgames
twitter: http://twitter.com/flaver_sg
mailto: j...@serialgames.co.jp
fla:ver http://flaver.jp/
tokotto http://www.serialgames.co.jp/tokotto/
WebCapS http://www.serialgames.co.jp/fun.html#WebCapSeria


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
PCにもメンバー掲示板ができました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwpxB

Quest

unread,
May 17, 2010, 6:59:11 AM5/17/10
to delphi...@freeml.com
Questです。

dtが0であることは、どうやって確認していますか?


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
共有スケジュールに予定を登録してメンバーに共有しよう♪
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwp63

サイダー

unread,
May 17, 2010, 9:07:43 AM5/17/10
to delphi...@freeml.com
細川さん、 Quest さん  ご返答ありがとうございます。

思い切って、Delphiをアンインストールして、再度 セットアップし直しました。
すると、ちゃんと日付が作成できるようになりました。 ヨカッタ

実は、レポートツールのデモをインストールして使っている時に、何十回もIDEごと
フリーズしてしまい、やむなくタスクマンでの停止や、PCがフリーズした場合は、
電源オフによる強制終了をやっていたので、データが破壊されてしまっていたのかも
しれません。(FastReport というツールですが、散々な目に遭いました。もう二度と使うのやめよう・・・・・・・・・)

本当にお騒がせしました。いろいろご親切にありがとうございました。
感謝感謝です。

それから、ボーランドの方が見ておられたら・・・・・・・

私は、Delphi2.0から使っていますが、Delphi6以後、これほどヘルプが酷いことになったのは初めてです。
このMLの常連の方は問題ないでしょうが、現在のHELPで、初心者に対して
どういう心境で「これで開発を始めませんか?」と提案できるのか理解できません。
もう何年もヘルプの事を指摘されているのに、一向に直らないのは不思議です。

お願いですから、Delphi6で構わないので、古いバージョンのヘルプファイルを
ダウンロードできるようにして下さい。また、もう発売していないのですから、
ライセンスフリーで配布してしまっても良いのではないですか?
今のXMLの出来損ないのような使えないヘルプよりは、何万倍も役に立ちます。
どうか、お願いします。
WEBでのヘルプがあるとおっしゃられるかもしれませんが、あの動作の鈍いサイトに接続して、ヘルプを検索する事自体、全く意味がないと思います。
サーバーも重いですし、w3c の validation すら通りません・・・。


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
写メはMLにアップしてみんなと楽しもう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwr8i

中村@ブレーン

unread,
May 18, 2010, 12:18:55 AM5/18/10
to delphi...@freeml.com
中村です。

う、なんかとんちんかんな回等をしてしまいました。
変換の方向が逆の話ですよね。

StrToDateTime は FormatSettings を「参考に」
文字列を変換するので、何かバグがあるのかもしれません。

ShortTimeFormat とかはどうなっていますでしょうか?

現在の TFormatSettings の内容を貼り付けていただけると
再現がやりやすいので有益な答えが返せるかもしれません。

中村@ブレーン さんは書きました:
>0 になるのは変ですね。変換不能だと例外が挙がるはずですが...
>
>それから、Windowsの地域設定ではなくて、特定の日付け形式を使って変換したい場合は、
>FormatDateTime が便利です。
>
>FormatDateTime('yyyy/mm/dd hh:nn:ss', s)
>
>こんなかんじです。

----------
東京都 日野市 中村拓男


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
PCにもメンバー掲示板ができました!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fwznC

hirodel

unread,
Jul 31, 2010, 2:01:12 AM7/31/10
to delphi...@freeml.com
hiroです いつもお世話様です
Delphi2010を長時間(30分位)最小化した後最大化すると
メニューが表示されないのはFAQでしょうか?
環境は以下です
WindowsXP sp3
RAD Studio 2010
Firebird 1.5


MLホームページ: http://www.freeml.com/delphi-users

----------------------------------------------------------------------
練習の予定も共有スケジュールに登録しよう!
http://ad.freeml.com/cgi-bin/sa.cgi?id=fEHXI

Reply all
Reply to author
Forward
0 new messages