C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: 時間計算


(過去ログ 92 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■55339 / inTopicNo.1)  時間計算
  
□投稿者/ きのぼう (1回)-(2010/11/27(Sat) 17:01:01)

分類:[.NET 全般] 

VB2010を全く学習したことがないので急にですがお願いします。

整数を入力したら0時0分からその整数秒進んだ時刻を文字列として返す関数を作るとしたら
どんなソースになるのでしょうか?
<例>
3600と入力したら1:0:0と返す
5436と入力したら1:30:36と返す

このような関数です。

VBはほとんどわからないので解説等つけてもらえるとありがたいです。
いきなりですがよろしくお願いします。
引用返信 編集キー/
■55341 / inTopicNo.2)  Re[1]: 時間計算
□投稿者/ 魔界の仮面弁士 (1961回)-(2010/11/27(Sat) 17:15:31)
No55339 (きのぼう さん) に返信
> 整数を入力したら0時0分からその整数秒進んだ時刻を
> どんなソースになるのでしょうか?
(案1) DateTime 型/TimeSpan 型を用いる。
(案2) 除算して計算で求める。

計算方法は分かりますよね?
(VB として記述する前に、計算手順を人に説明できますか?)


> 文字列として返す関数を作るとしたら
計算で求まった「数値」を、「数字」すなわち文字列にする方法は分かりますか?


> 3600と入力したら1:0:0と返す
> 5436と入力したら1:30:36と返す
3600→1:0:0 とか
3600→1:00:00 とかではなく、
3600→1:0:0なのですね?

半角文字を全角文字に変換するには、StrConv 関数を利用できます。
http://park5.wakwak.com/~weblab/refStrConv.html
引用返信 編集キー/
■55342 / inTopicNo.3)  Re[2]: 時間計算
□投稿者/ きのぼう (3回)-(2010/11/27(Sat) 17:31:13)
解答ありがとうございます

> (案1) DateTime 型/TimeSpan 型を用いる。
> (案2) 除算して計算で求める。
> 計算方法は分かりますよね?
> (VB として記述する前に、計算手順を人に説明できますか?)
自分は案2で求めようと思っておりました。計算方法はわかります


> 計算で求まった「数値」を、「数字」すなわち文字列にする方法は分かりますか?
すみません。わかりません


> 3600→1:0:0 とか
> 3600→1:00:00 とかではなく、
> 3600→1:0:0なのですね?
これも半角のままです。
全角になっていて申し訳ありません。
数値3つを間に:を入れて文字列にするにはどうすれば良いのでしょうか?

引用返信 編集キー/
■55343 / inTopicNo.4)  Re[3]: 時間計算
□投稿者/ 魔界の仮面弁士 (1962回)-(2010/11/27(Sat) 17:50:01)
No55342 (きのぼう さん) に返信
> 解答ありがとうございます
回答はしますが、
解答は出しませんよ。

# といいつつ、某掲示板にあった同内容の質問に、
# 解答ソースを投稿していたりします。半年前に。


>>(案2) 除算して計算で求める。
> 自分は案2で求めようと思っておりました。計算方法はわかります
商を求めるには、「\ 演算子」を使います。
a = 7 \ 3 とすれば、a は 2 になります。

余りを求めるには、「Mod 演算子」を使います。
a = 7 Mod 3 とすれば、a は 1 になります。


>>計算で求まった「数値」を、「数字」すなわち文字列にする方法は分かりますか?
> すみません。わかりません
数字を文字列に変換する方法は幾つかありますが、たとえば以下のような物があります。
・CStr関数
・ToString メソッド
・String.Format メソッド
・Format 関数
・FormatNumber 関数


> 数値3つを間に:を入れて文字列にするにはどうすれば良いのでしょうか?
「数字」3つ繋げて作る場合には、
 s = s1 & ":" & s2 & ":" & s3
のように、「& 演算子」を作って連結すれば OK です。

また、String.Format というメソッドを使う事で、
「数値」3つを今回求める文字列形式に変換する事もできます。
書式指定の構文を指定する事になるので、少々慣れが必要ですけれどね。
http://hanatyan.sakura.ne.jp/vbnetbbs/wforum.cgi?no=9905&mode=msgview
引用返信 編集キー/
■55344 / inTopicNo.5)  Re[4]: 時間計算
□投稿者/ きのぼう (5回)-(2010/11/27(Sat) 17:58:29)
本当に細かくありがとうございます。

Statement is not valid in a namespace.

コンパイルしたら上記のエラーが出たのですが
これは関数の宣言が違うということだと思うのですがどこが違うのか分かりません。。。
自分が書いた宣言です。
Private Function time(a As Integer)As String

エラー文すら勘違いしていたらすみません。
引用返信 編集キー/
■55345 / inTopicNo.6)  Re[5]: 時間計算
□投稿者/ 魔界の仮面弁士 (1963回)-(2010/11/27(Sat) 18:16:12)
No55344 (きのぼう さん) に返信
> Statement is not valid in a namespace.
英語版をお使いですか?

日本語版であれば、このエラー(コンパイルエラーBC30001)は、
 『名前空間のステートメントが無効です。』
というメッセージになるはずなのですが。


> これは関数の宣言が違うということだと思うのですがどこが違うのか分かりません。。。
宣言する場所が間違っているようですね。
Function を記述する場所は、
 ・「Class クラス名」〜「End Class」ブロックの中
 ・「Structure クラス名」〜「End Structure」ブロックの中
 ・「Module モジュール名」〜「End Module」ブロックの中
のいずれかでなければいけません。

これらのブロックの外に記述したり、「Namespace 名前空間」〜「End Namespace」の中に
記述しようとすると、今回のコンパイルエラーが発生します。
引用返信 編集キー/
■55347 / inTopicNo.7)  Re[6]: 時間計算
□投稿者/ きのぼう (6回)-(2010/11/27(Sat) 18:58:44)
何から何までありがとうございます。

おかげでようやく作ることが出来ました!
本当にありがとうございます。
引用返信 編集キー/
■55350 / inTopicNo.8)  Re[1]: 時間計算
□投稿者/ 渋木宏明 (51回)-(2010/11/27(Sat) 19:19:15)
渋木宏明 さんの Web サイト
> 整数を入力したら0時0分からその整数秒進んだ時刻を文字列として返す関数を作るとしたら
> どんなソースになるのでしょうか?
> <例>
> 3600と入力したら1:0:0と返す
> 5436と入力したら1:30:36と返す

それぞれ

DateTime.AddSeconds(3600).ToString()
DateTime.AddSeconds(5436).ToString()

とか。(C# ですが)

引用返信 編集キー/
■55351 / inTopicNo.9)  Re[2]: 時間計算
□投稿者/ 魔界の仮面弁士 (1964回)-(2010/11/27(Sat) 19:34:37)
2010/11/27(Sat) 19:39:36 編集(投稿者)
No55350 (渋木宏明 さん) に返信
>>整数を入力したら0時0分からその整数秒進んだ時刻を文字列として返す関数を作るとしたら
>>どんなソースになるのでしょうか?
> DateTime.AddSeconds(3600).ToString()
> DateTime.AddSeconds(5436).ToString()
地域設定にもよりますが、ToString() を使うと、
 "0001/01/01 1:00:00"
 "2010/11/27 1:00:00"
といった表記になってしまうかと思います。

DateTime 型を使うなら、
 s = DateTime.MinValue.AddSeconds(3600).ToLongTimeString()    '1:00:00
 s = DateTime.MinValue.AddSeconds(5436).ToLongTimeString()    '1:30:36
あるいは、
 s = DateTime.MinValue.AddSeconds(3600).ToString("H:m:s")     '1:0:0
 s = DateTime.MinValue.AddSeconds(5436).ToString("H:m:s")     '1:30:36
あるいは、
 s = DateTime.MinValue.AddSeconds(3600).ToString("H:mm:ss")   '1:00:00
 s = DateTime.MinValue.AddSeconds(5436).ToString("H:mm:ss")   '1:30:36
ではないでしょうか?


なお、時刻ではなく時間なら、
 s = TimeSpan.FromSeconds(3600).ToString()    '01:00:00
 s = TimeSpan.FromSeconds(5436).ToString()    '01:30:36
ですね。

TimeSpan を使った場合には、24時間以上の値(たとえば 90000 秒後)を
指定した場合の扱いが異なります。


>>> (案1) DateTime 型/TimeSpan 型を用いる。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -