none
時間について RRS feed

  • 質問

  • まったくの初心者が少しずつ勉強しています。

    アホな質問でごめんなさい。

    試しに「ボタン1をクリックするとその時間、ボタン2をクリックするとその時間がテキストボックス1,2にそれぞれ入力されて、さらにテキストボックス3に経過時間が入力される」というプログラムを作りたいのですが、データ型に「Date」を入れて

    StartTime=Nowと書くと2006/12/06 16:10:15のように日付もテキストボックスに入力されてしまいます。現在時間のみを表示させるには、どこをどのようにすれば良いのでしょうか?

    データ型が違うのか、Nowが違うのか教えて下さいませんか?

     

    2006年12月6日 8:15

回答

すべての返信

  • Now.Tostring(書式指定文字列) というような記述で時間だけをとりだせると思います。

     

    2006年12月6日 8:25
  • どっとねっとふぁん様、ありがとうございます。

    早速やってみたのですが、やっぱり日付も出てしまいます。

    さらに何か入力が必要なのでしょうか?

    StartTime=Now.Tostring

    TextBox1.Text=StartTime

    と書いています。

    助言、よろしくお願い致します。

    2006年12月6日 8:47
  • 書式指定子がキーワードです。

    日付や時刻を文字列に変換するには?
    http://www.atmarkit.co.jp/fdotnet/dotnettips/200customdate/customdate.html

    2006年12月6日 8:55
    モデレータ
  • trapemiya様、ありがとうございます。

    以前も助言を頂きましたね。あの時より少しはマシになったかと思います。

    何しろちゃんと動くようになりましたから・・・(;´▽`A

    おかげ様で18:07:20と出るようになりました。

    明日はつぎの段階、「経過時間」をプログラムする事にトライします。

    またよろしくお願い致します。(。・_・。)ノ

     

    2006年12月6日 9:10
  • 昨日に引き続き今度は経過時間にトライしましたが、あえなく撃沈(。>0<。)

    TextBox3.Text=(StopTime-StartTime).ToString("HH:mm:ss")

    と書いてみましたが、「例外が発生しました」とのエラーメッセージが・・・

    例外って何だよ!!とキレぎみのどらに誰か救いの手を差し伸べて下さい。

     

    2006年12月7日 8:08
  • StopTimeとStartTimeの型は何でしょうか?
    また、どういう例外が発生しているのでしょうか?

    2006年12月7日 10:41
    モデレータ
  • 文字列を引き算しているのではないでしょうか。
    そうだと仮定すると文字列をいったん DateTime 構造体に変換してから、経過時間を求める必要があります。
    変換しなくても開始と終了の時間を DateTime の変数に入れておいてもいいですね。

    経過時間を求めるために必要な情報としては、
    DateTime には Ticks プロパティが存在します。
    そして DateTime のコンストラクタには DateTime (Int64) が存在します。

    あとはお分かりですよね。

    2006年12月7日 13:16
  • Subtractメソッド使って、かえってくるTimeSpanを経過時間に直す。
    2006年12月7日 15:56
  • String(こんなのあります?)だと思います。

    カーソルを合わせるとそう出てくるので・・・。

    2006年12月8日 0:56
  • 確かに文字列を引き算しているような気がします。

    >あとはお分かりですよね。

    全然意味がわかりません。(;;)

    ダッチさんの予想をはるかに越えるスーパー初心者なのです。

    ごめんなさい・・・

    2006年12月8日 0:58
  • 具体的にコードを書いてもらえると非常に助かるのですが・・・

    TextBoX3.Text=○○○○○○○○のように・・・

    甘えすぎ?ですよね。スイマセン(;´▽`A

    2006年12月8日 1:00
  • どらさん、こんにちは。

     どら さんからの引用
    String(こんなのあります?)だと思います。
    カーソルを合わせるとそう出てくるので・・・。

    最初から、System.DateTime 型で扱うようにしましょう。

    型は .NET CLR の基本です。
    型を理解しなければ何もはじまりません。

    試行結果が書かれていないので、現状どのあたりがわからないのかが、わからないですね。

    2006年12月8日 1:16
  • 型を意識して下さい。String同士では引き算はできません。DateTime型同士ですと、引き算が可能です。その結果はTimeSpanという時間間隔を表す構造体が返ってきます。あとは、そこから時間を取り出すことができます。TimeSpanのToStiring()は、HH:MM:SSの形で時間を表示してくれます。
    あと、どっとねっとふぁんさんが述べられているように、DateTime型のメソッドにはSubtractがありますので、
    DateTime型のもの.Subtract(DateTime型のもの)
    でも、TimeSpanが返ってきます。
    2006年12月8日 1:19
    モデレータ
  • そうなんです。型を理解していないのです。

    参考書通りにコードを書いているので、動くことは動くのですが理解していないのです。

    System.DateTime型を扱うというと、冒頭に

    Private StartTime As System.DateTime

    と入れれば良いのですか?

    見当違いだったらごめんなさい。(^-^;)

     

    2006年12月8日 1:38
  • > 具体的にコードを書いてもらえると非常に助かるのですが・・・

    確かに今は助かるんでしょうけど。
    次からも何かわからなかったら掲示板で聞いて、コピペだけでやっていくつもりですか?
    きちんと調べて納得したうえでコードを書いていかないと、何かつまづくたびに誰かに聞かないと前にすすめない、ということになってしまいますよ。

    ということで、みなさんたくさんヒントをだしてくれていますから、あとはドキュメントを確認しながらいろいろ試してみるのがよいと思います。
    自分で実際に試して確認した知識は後々まで忘れませんから。

     

    2006年12月8日 1:46
  • みなさんの温かいご指導のもとで、思い切って自分のアホさ加減をさらしたいと思います。

    私が組んだコードを下にさらしますね。

    Public Class Form1
        Dim StartTime, StopTime

        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            StartTime = Now.ToString("HH:mm:ss")
            TextBox1.Text = StartTime
            TextBox2.Text = ""
            TextBox3.Text = ""
        End Sub

        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            StopTime = Now.ToString("HH:mm:ss")
            TextBox1.Text = StartTime
            TextBox2.Text = StopTime
    ☆     TextBox3.Text = (StopTime - StartTime).ToString("HH:mm:ss")
        End Sub


    End Class
    ☆部分が例外が発生しました、とエラーが出るのです。

    詳しい解説を是非お願いします。m(_ _)m

     

    2006年12月8日 1:52
  • 確かにその通りですね。

    でも何がわからないのかが、自分でもわからないんですよ。

    オススメの参考書などありますか?

    ちなみに公式解説書の「パソコン教科書」は持っていますが、私の作りたいのはゲームじゃないんですよ。

    2006年12月8日 1:58
  • > みなさんの温かいご指導のもとで、思い切って自分のアホさ加減をさらしたいと思います。
    >  (中略)
    > 詳しい解説を是非お願いします。m(_ _)m

    これだけみんながヒントを出してくれているのに、そのヒントはすべて無視して、サンプルコードを書け、ということですか。。。

     

    2006年12月8日 2:10
  • >>どらさん

     どら さんからの引用
    そうなんです。型を理解していないのです。

    この機会に、調べ方で良いので理解してみてください。

    誰でも初めて触る、型 (クラス) くらいあります。
    その都度、リファレンスからどのようなメンバがあるかを眺めるようにすれば良いのです。

    詰まっていない場合は見ないですが、今回のように詰まった場合は、
    このように、リファレンスを見るクセがついている方はこの業界には多いでしょう。

    # メンバというのは、メソッドとかプロパティです。

    今回の場合ですと、System.String 型がどういった型で、演算がどうサポートされているかを調べていれば、
    別の型を使うことを検討したのではないかと思います。

    参考書通りにコードを書いているので、動くことは動くのですが理解していないのです。

    いきなり理解はできなくても構わないと思いますが、調べることができないのはこの先つらいかもしれません。

    System.DateTime型を扱うというと、冒頭に

    Private StartTime As System.DateTime

    と入れれば良いのですか?

    Private かどうかはわからないですが、(スコープはどうでも良いというか、狭い方が良いので) 型はそういうことです。
    ちなみに、System.DateTime 構造体は、VB の Date 型と同じというか、別名です。

    # 本題と関係ないのですが、特別な場合を除き件名は変えないほうが良いです。
    # 返信先を明示化したい場合は、その方の名前を冒頭に書くか、引用すれば良いです。

    2006年12月8日 2:13
  • じゃんぬねっとさん、丁寧にありがとうございます。

    わかりました。もう一度1からやってみます。

    ところで参考書に「リファレンス」という言葉が載っていないのですが、リファレンスとはなんですか?どこを見ればいいのでしょうか?

    件名の事も了解しました。何しろ、1から10まで初めてなもんで・・・

    今後もご指導、お願い致します。

    2006年12月8日 2:32
  • >DateTime型同士ですと引き算が可能です。

    「演算子”-”は、型”Date"および”String"に対して定義されていません」

    というエラーがでますが・・・「Date」と「System.DateTime」では違うのでしょうか?

     

    2006年12月8日 3:04
  •  どら さんからの引用
    >DateTime型同士ですと引き算が可能です。

    「演算子”-”は、型”Date" および”String"に対して定義されていません」
    というエラーがでますが・・・「Date」と「System.DateTime」では違うのでしょうか?

    どらさん、まずは焦らないで、エラーメッセージを良く読んでください。

    String 型を扱っているのではないかと、思われますよ。

    私は、"型を意識してください" と書きました。
    エラーを見ると 「型が一致していない」 ようなので、このあたり確認してみてください。

    2006年12月8日 3:19
  •  どら さんからの引用
    わかりました。もう一度1からやってみます。

    そうですね、まずは体勢を立て直しましょう。

    ところで参考書に「リファレンス」という言葉が載っていないのですが、リファレンスとはなんですか?どこを見ればいいのでしょうか?

    わからないことは、検索エンジンで調べてみてください。
    たとえば、Google で 「リファレンスとは」 と検索してみてください。

    件名の事も了解しました。何しろ、1から10まで初めてなもんで・・・

    はい、すぐに正すことが出来たのであれば、気にすることはありません。

    それと、件名については、強制ではなくて提案だったりします。
    ハンドルを件名に書かれるのを、好ましいと思わない方もいらっしゃいます。

    2006年12月8日 3:23
  • 「プロジェクトのプロパティ」 - 「コンパイル」 Option Strict を「On」にすることをお勧めします。

    Option Strict を「On」 にすると(いい意味で)いやでも型を意識しないとだめになります。

    Dim StartTime, StopTime
    この変数の型は目的の DateTime 型になっていますか。

    2006年12月8日 3:28
  • 「型」が意識出来ているかどうかは、まだ自分ではわかりませんが冒頭に

    Private StartTime,StopTime As Date

    と入れたのですが・・・

    とにかく頼ってばかりいないで、もう一度参考書とにらめっこしてみます。

    最後にもうひとつだけいいですか?

    >Subtractメソッド使って、かえってくるTimeSpanを経過時間に直す。

    この助言をもう少し、くだいて頂けないでしょうか?

    ダメならスルーして下さい。

    色々、プログラムの事から常識的な部分までご指導ありがとうございました。

    2006年12月8日 3:30
  • > >Subtractメソッド使って、かえってくるTimeSpanを経過時間に直す。
    > この助言をもう少し、くだいて頂けないでしょうか?

    trapemiyaさんがくだいてくださってますから、その発言をよく読んでみてください。

    > もう一度参考書とにらめっこしてみます。

    参考書も一冊じゃなく、店頭で読んでみてわかりやすそうなのを何冊かあたったほうがいいかもしれませんね。
    それと、リファレンスも探して読む癖をつけましょう。

    DateTimeのリファレンス
    http://msdn2.microsoft.com/ja-jp/library/system.datetime(VS.80).aspx

    自分のPCにドキュメントをインストールしていれば、Visual Studio上で確認したいクラスにカーソルをあててF1キーを押せばそのクラスのリファレンスが表示されると思います。
    ドキュメントがインストールされていなくても、上記のようにWeb上のリファレンスが利用できます。

     

    2006年12月8日 3:42
  • どっとねっとふぁんさん、trapemiyaさん、ダッチさん、じゃんぬねっとさん

    色々助言、ありがとうございました。

    少しずつ理解出来てきたように思います。

    なんとか経過時間も表示されるようになりました。ただし、2秒が20000000と表示されますが・・・(^^;)

    あと一息ですので何とかがんばってみます。

    次回はもう少しレベルの高い質問が出来れば、と思います。

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

     

    2006年12月8日 4:01
  •  どら さんからの引用

    >なんとか経過時間も表示されるようになりました。ただし、2秒が20000000と表示されますが・・・(^^;)

    どうして20000000と表示されるのだろ?

    2006年12月10日 5:41
  • アクアさん、はじめまして。

    どうして20000000と表示されるのか、今日、参考書片手に無い頭をしぼって考えてみます。

    あまり皆さんに頼ってばかりいると非難されそうなので・・・

    2006年12月11日 1:11
  • どらさん、こんにちは。

     どら さんからの引用
    どうして20000000と表示されるのか、今日、参考書片手に無い頭をしぼって考えてみます。

    どのような実装をして、そうなったかを書かないと助けたくとも助けられないです。
    出力しているプロパティが、間違っているとかそういったことも考えられますので、試行したことを書いてみてください。

    あまり皆さんに頼ってばかりいると非難されそうなので・・・

    質問者もいろんな投稿スタイルがあるように、回答者にも投稿スタンスがあります。
    ちなみに、私もあまりにひどい投稿に対しては、苦言を言うことはあります。
    (悪意のない投稿に苦言は言えないので、極力アドバイスという名の提案をします。今回の投稿もそれです)

    確かに質問が丸投げであれば、非難されるかもしれませんが、試行したことや調べたことを提示した上で、わからないところを明示化すれば非難されることは少ないのではないかと思います。

    とりあえず、ヒントをおいておきます。

    使用するのは、System.DateTime のインスタンス 2 つ、Subtract メソッド、Subtract メソッドの戻り値に Timespan のインスタンス、Seconds プロパティです。

    2006年12月11日 2:10
  • あ、ご挨拶が遅れました、アクアと申します。宜しくお願い致します。

    私も勉強中でして、どらさんの投稿内容と、私の1年半前の姿がダブっていて、非常に興味をもって拝見させて頂いてます。

    一応、私自身も、どらさんの示して頂いたコードをもとに検証の意味も含め作成いたしました。ここではお見せいたしませんが(恥ずかしいので…)

    私の検証したプログラムでは、200000000はでませんでした。

    それと、私のコードにはじゃんぬさんのアドバイスと同じものを使っています。

     

    #最初の頃は、ヘルプ画面(MSDN)も見て分かり辛いですよね。 そういう時もありましたが慣れるとかなり強力です。

    2006年12月11日 9:56
  • じゃんぬねっとさん、アクアさん、温かいご指導本当にありがとうございます。

    今現在、自分でも何をどう質問すれば良いか全くわからない状況なのです。

    ただ、みなさんのアドバイスを自分なりに解釈して次のように書いてみました。

    Private StartTime,StopTime As Date

    中略

    TextBox3.Text=(StopTime-StartTime).Ticks

    すると、テキストボックス3に一応、2秒なら20000000と表示されるようにはなったのです。

    何か、根本的に間違っているのでしょうか?

    もう一度じゃんぬねっとさんのヒントを元に、考えてみますね。

    2006年12月12日 1:38
  • Ticksの単位を調べることができますか? 20000000の単位は何でしょうか?
    2006年12月12日 2:42
    モデレータ
  • trapemiyaさん、ありがとうございます。

    単位はわかりませんが、例えばStopTimeが14:00:00でStartTimeが14:00:02の時に経過時間20000000と表示されます。

    じゃんぬねっとさん、ホントにごめんなさい。

    >使用するのは、System.DateTime のインスタンス 2 つ、Subtract メソッド、Subtract メソッドの戻り値に Timespan のインスタンス、Seconds プロパティです。

    この文章を理解するために、少し時間を下さい。

    もう一度参考書を1から読んでみますので・・・。

    2006年12月12日 5:03
  • プログラムを進めていく上で、MSDNライブラリは必須になります。MSDNライブラリで確認して下さい。

    TimeSpan.Ticks プロパティ
    http://msdn2.microsoft.com/ja-jp/library/system.timespan.ticks(VS.80).aspx

    また、Ticksにキャレットがある状態で、F1キーを押してみて下さい。Ticksの説明ページが自動的に開かれませんか?

    2006年12月12日 5:39
    モデレータ
  • ありがとうございます!!

    MSDNライブラリを見ればよかったんですね!!

    おかげ様で進みそうな気がします。('-^v)Thanks

    今日は本業(受け付け)が忙しかったので、あまりトライ出来ませんでしたが明日以降またがんばってみます。

    みなさん、本当に助かりました。ありがとうございます。

    2006年12月12日 7:36
  • どらさん、こんにちは。

     どら さんからの引用
    単位はわかりませんが、例えばStopTimeが14:00:00でStartTimeが14:00:02の時に経過時間20000000と表示されます。

    じゃんぬねっとさん、ホントにごめんなさい。

    使用するのは、System.DateTime のインスタンス 2 つ、Subtract メソッド、Subtract メソッドの戻り値に Timespan のインスタンス、Seconds プロパティです。

    この文章を理解するために、少し時間を下さい。

    もう一度参考書を1から読んでみますので・・・。

    ここまで来れば、答えは消去法で出せますよ。

    1. 私の投稿に "Ticks プロパティを使う" などという文章は出てきません。
    2. 私の投稿には "Seconds プロパティを使う" という文章は出てきました。

    1. どらさんは Ticks プロパティを使用しています。
    2. どらさんは Seconds プロパティを使用していません。

    ここから導き出せる答えは、Ticks プロパティの代わりに(以下略

    ということです。

    2006年12月12日 7:38
  • おぉ~!!

    今度はちゃんと、「2」と出ました!!

    ありがとうございます!!

    あとは、以前どなたかに指摘されたように、どうしてこうなるのか理解する事が必要ですよね?

    でないと応用がききませんよね?

    とりあえず、初めてのトライ、ストップウオッチは完成したようです。

    みなさん、重ね重ねありがとうございます!!

    本当に作りたいものを作れるようになるには、まだまだ遠い道のりですが、頑張れる気がします!

    2006年12月12日 7:47
  • 解決おめでとうございます。

    ところで、折角ですから

     どら さんからの引用

    TextBox3.Text=(StopTime-StartTime).Ticks

    ここで()の式のかわりにSubtract メソッドをつかってみません?

    2006年12月12日 8:03
  • そうなんですよね。みなさんのアドバイスだとSubtractメソッドを使った方がいいように教えて下さってますよね・・・

    いまいち使い方がわからないのですが、明日は勉強する時間が少しあると思いますので、トライしてみようと思います。

    今日は、これにて退社いたします。

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

    2006年12月12日 9:08
  • 「簡単な経過時間の計測」 の優しい解説。

    VB.NET - 簡単な経過時間の計測

    Private Shared Sub MosaMosaAA()
        ' 開始時間 (System.DateTime のインスタンス 1) を取得
        Dim dtBeginTime As System.DateTime = System.DateTime.Now
    
        ' 2 秒時を止める (The World!!)
        System.Threading.Thread.Sleep(2000)
    
        ' 終了時間 (System.DateTime のインスタンス 2) を取得
        Dim dtEndTime As System.DateTime = System.DateTime.Now
    
        ' TimeSpan のインスタンスを取得
        Dim tsResult As System.TimeSpan = dtEndTime.Subtract(dtBeginTime)
    
        ' TimeSpan のインスタンスから Seconds プロパティを参照する
        MessageBox.Show("経過時間 = " & tsResult.Seconds.ToString())
    End Sub
    

    コメントで書いた方がわかりやすいかと思いまして。

    2006年12月12日 9:09
  • 見たことも無いようなコードがいっぱい並んでる・・・

    とりあえず丸写しして、カーソルを合わせてF1を押せばいいんですよね!?

    じゃんぬねっとさん、ありがとうございます。

    2006年12月13日 3:33
  •  どら さんからの引用
    見たことも無いようなコードがいっぱい並んでる・・・

    少し前にも書かせて頂いたとおり、System.DateTime 型は VB の Date 型と同じです。(ただの別名です)

    その他の部分についても、すでに既出ですよね?
    TimeSpan、Subtract...

    System.DateTime.Now は現在の日時を取得するために使用していますし、
    System.Threading.Thread.Sleep メソッドは、今回テストのために使用していますし、
    MessageBox.Show メソッドも表示させるためだけに使っているもので、本題とは関係ないです。

    とりあえず丸写しして、カーソルを合わせてF1を押せばいいんですよね!?

    それで、リファレンスが見れるのであれば、それで良いでしょう。
    右クリック (コンテキスト メニュー) から、定義を参照して、オブジェクト ブラウザを開くことも大切です。

    2006年12月13日 4:36
  • 右クリックしても「コンテキストメニュー」というのが出てきませんが、リファレンスというものを教えて頂いたので、だいぶ勉強できるようになりました。ありがとうございます!

    今度は「コードを入れてボタンを押すと得意先情報が出る」というものを作成中です。

    また行き詰まったらよろしくお願いしま~す!

    2006年12月13日 4:47
  •  どら さんからの引用
    右クリックしても「コンテキストメニュー」というのが出てきませんが

    そんなはずはないでしょう...

    コード エディタ部分のどの位置で右クリックしても、コンテキスト メニューは出現します。
    コンテキスト メニューが何たるかわかっていないとか、そういうヲチではないですよね。

    2006年12月13日 6:51
  • >コンテキスト メニューが何たるかわかっていないとか、そういうヲチではないですよね。

    思いっきりそういうオチでした ( ̄w ̄) ぷっ

    でも用語解説で調べたので大丈夫です。

    またひとつ賢くなりました。

     

    2006年12月13日 7:12