時間の扱いについて

タグの編集
投稿者 rs000008  () 投稿日時 2008/6/8 00:51:00
全て表示
投稿者 rs000008  () 投稿日時 2008/7/24 11:08:00
 
Moduleファイルを作成し、魔界の仮面弁士さんから 
教えていただいたコードを入れました。 
 
プロジェクト内のすべてのフォームでこのModuleは 
参照できると思いますが、 
Form側でもdt等宣言が必要なのでしょうか? 
Nowと同じように使えるようになるのでしょうか? 
 
すみませんが教えていただけたらと思います。 
 
※VB2008を使っています。
投稿者 るしぇ  () 投稿日時 2008/7/24 18:37:00
>>3 
>Form側でもdt等宣言が必要なのでしょうか?  
どの dt でしょうか?引数? 
>Nowと同じように使えるようになるのでしょうか?  
関数自体は使えますよね? 
Now 関数は現在の時刻なのでパラメータで何か指定する 
必要はありませんが、“ある日付”を4時間ずらすので 
あれば、どの時間を4時間ずらすのか引数で指定する 
必要があるのでは? 
 
つねに現在の時刻の4時間後を取得する関数にでもする 
なら、引数を省略する形に出来るのでしょうが、今度は 
計算結果の日付を4時間ずらそうとしてもできないという 
事態が発生します。 
 
関数の目的を考えて、それにあわせた使い方をしてください。 
もしくは目的に応じて関数の形を修正してください。
投稿者 るしぇ  () 投稿日時 2008/7/24 19:17:00
ついでに拡張メソッドについての分かり易いと思う説明を見つけましたので 
リンクしておきます。 
http://d.hatena.ne.jp/nacookan/searchdiary?word=*%5BVB%5D 
 
Extension 属性はでないと使えないのでボクは使いません。 
# まだまだの出番が無い現場で仕事してるので使えない。 
これから勉強していく人は覚えていった方がいいのかなぁ。。。 
 
まぁ、新しい方法なので自分で調べる必要がありますってのと、 
古いバージョンだとまた違う書き方になりますってのだけ覚えて 
おいてください。
投稿者 rs000008  () 投稿日時 2008/7/26 02:42:00
 
dt等宣言が必要なのかと思いましたが、勘違い 
していました。 
すみませんでしたm(__)m 
 
Dim nowTime As String 
nowTime = Format(Now, "HH:mm") 
上記のようにNowからHH:mmを取り出していました。 
 
教えていただいたModuleを使い、 
Dim nowTime As String 
nowTime = Format(Sample.To28HourString(Now), "HH:mm") 
としてHH:mmを取り出そうと思いましたが、文字列HH:mm 
が入ってしまいます。 
 
どのようにSample.To28HourString(Now)からHH:mmを取り出したらいいでしょうか? 
教えていただけると助かります。 
よろしくお願いしますm(__)m
投稿者 rs000008  () 投稿日時 2008/7/27 20:56:00
(Module側) 
Module Module1 
    Public Sub Main() 
        Dim dt As Date 
 
        Console.WriteLine(Now.To28HourString()) 
 
        'dt = #12/31/2008 3:59:59 AM# 
        dt = #3:59:59 AM# 
        Console.WriteLine(dt.To28HourString()) 
 
        'dt = #12/31/2008 4:00:00 AM# 
        dt = #4:00:00 AM# 
        Console.WriteLine(dt.To28HourString()) 
    End Sub 
 
 
    <Extension()> _ 
    Public Function To28HourString( _ 
     ByVal dt As Date) As String 
        Return ToDiffHourString(dt, 4) 
    End Function 
 
    <Extension()> _ 
    Private Function ToDiffHourString( _ 
     ByVal dt As Date, ByVal DiffHour As Byte) As String 
        Return String.Format( _ 
         CultureInfo.InvariantCulture, _ 
         "{1:00}:{0:mm}", _ 
         dt - New TimeSpan(DiffHour, 0, 0), _ 
         If(dt.Hour >= DiffHour, dt.Hour, dt.Hour + 24)) 
    End Function 
End Module 
 
(Form側) 
nowTime = Format(Module1.To28HourString(Now)) 
 
とする事でうまくいきました。 
皆さん、本当にありがとうございましたm(__)m
投稿者 rs000008  () 投稿日時 2008/8/21 03:59:00
>>7 
Imports System  
Imports System.Runtime.CompilerServices  
Imports System.Globalization  
 
Module Sample  
 Public Sub Main()  
  Dim dt As Date  
 
  Console.WriteLine(Now.To28HourString())  
 
  dt = #12/31/2008 03:59:59#  
  Console.WriteLine(dt.To28HourString())  
 
  dt = #12/31/2008 04:00:00#  
  Console.WriteLine(dt.To28HourString())  
 End Sub  
 
 
 <Extension()> _  
 Public Function To28HourString( _  
  ByVal dt As Date) As String  
  Return ToDiffHourString(dt, 4)  
 End Function  
 
 <Extension()> _  
 Private Function ToDiffHourString( _  
  ByVal dt As Date, ByVal DiffHour As Byte) As String  
  Return String.Format( _  
   CultureInfo.InvariantCulture, _  
   "{0:dddd}", _  
   dt - New TimeSpan(DiffHour, 0, 0), _  
   If(dt.Hour >= DiffHour, dt.Hour, dt.Hour + 24))  
 End Function  
End Module  
 
 
yyyy\/MM\/ddの所をddddと変更し、曜日を取り出そう 
とした所、日曜日ではなくSundayが出てきます。 
日曜日を出すにはどのようにすればいいでしょうか? 
 
後、一日足した日を出すにはどのようにすればいいで 
しょうか? 
上記のModule内で変更して可能でしたら、教えていた 
だけたらと思います。 
よろしくお願いしますm(_ _)m
投稿者 るしぇ  () 投稿日時 2008/8/21 06:02:00
>日曜日ではなくSundayが出てきます。  
>日曜日を出すにはどのようにすればいいでしょうか?  
CultureInfo.CurrentCulture 
 
>一日足した日を出すにはどのようにすればいいで  
>しょうか?  
dt.AddDays(1) 
 
最初の質問は CultureInfo を理解してないと分からないけど、 
[CultureInfo メンバ] 
http://msdn.microsoft.com/ja-jp/library/system.globalization.cultureinfo_members(VS.80).aspx 
 
日付操作に関しては日付型のメンバに操作関数が一式 
そろってるわけですし、 
[DateTime メンバ] 
http://msdn.microsoft.com/ja-jp/library/system.datetime_members(VS.80).aspx 
サンプルもあります。 
http://homepage1.nifty.com/rucio/main/dotnet/Samples/dnSampleDateAdd.htm 
自分で調べるようにしてください。
投稿者 魔界の仮面弁士  () 投稿日時 2008/8/21 06:14:00
>>8 
インバリアントな CultureInfo を指定しているためです。 
 
日本語で表現したいのであれば、 
CultureInfo.InvariantCulture ではなく、 
New CultureInfo("ja-JP") を指定してみてください。
投稿者 るしぇ  () 投稿日時 2008/8/21 22:04:00
>>9 
デジャブを感じて検索したら、 
>428. tetデータの読み込み・メッセージ表示 
http://rucio.bbs.coocan.jp/?m=listthread&t_id=428&summary=on 
rs000008 さんは AddDays 知ってるよね。
投稿者 rs000008  () 投稿日時 2008/8/26 15:44:00
魔界の仮面弁士さん、るしぇさん 
 
ありがとうございました。 
 
Form内でAddDays(1)をしようとしていました…。 
申し訳ありませんでしたm(_ _)m