ラベル VB の投稿を表示しています。 すべての投稿を表示
ラベル VB の投稿を表示しています。 すべての投稿を表示

2011年12月17日土曜日

[VB.NET] 週番号から特定の曜日の日付を取得する

指定した年の週番号から、その週の特定の曜日の日付を取得します。
このコードでは第一週をその年の最初の月曜日から、としているため、
例えば2011年の第一週は1月3日からとなります。
2011年1月1,2日は2010年の最終週とみなされます。

''' <summary>
''' 指定した年、週番号の月曜日を取得
''' </summary>
''' <param name="year">年(yyyy)</param>
''' <param name="weekNum">週番号(1-53)</param>
''' <returns></returns>
''' <remarks></remarks>
Shared Function GetFirstDateOfWeek(ByVal year As Integer, ByVal weekNum As Integer) As DateTime
    '第一週をその年最初の月曜日からの週と設定
    Dim weekRule As CalendarWeekRule = CalendarWeekRule.FirstFullWeek
    Dim dtJan1 As DateTime = New DateTime(year, 1, 1)
    '指定した年の最初の月曜日を取得
    'この例では月曜日に固定しているが、DayOfWeek.Mondayを引数として受け取れば
    '任意の曜日の日付を取得できる
    Dim dtFirstMonday As DateTime = GetNearestDayOfWeek(dtJan1, DayOfWeek.Monday)
    Dim cal As Calendar = CultureInfo.CurrentCulture.Calendar
    Dim firstWeek As Integer = cal.GetWeekOfYear(dtJan1, weekRule, DayOfWeek.Monday)
    If firstWeek <= 1 Then
        weekNum -= 1
    End If
    Dim result As DateTime = dtFirstMonday.AddDays(weekNum * 7)
    Return result
End Function

''' <summary>
''' 指定した日付から直近(未来)の指定した曜日の日付を取得
''' </summary>
''' <param name="dtDate">日付</param>
''' <param name="desiredDayOfWeek">曜日</param>
''' <returns></returns>
''' <remarks></remarks>
Shared Function GetNearestDayOfWeek(ByVal dtDate As DateTime, ByVal desiredDayOfWeek As DayOfWeek) As DateTime
    Dim dayOfWeek As DayOfWeek = dtDate.DayOfWeek
    If dayOfWeek = desiredDayOfWeek Then
        Return dtDate
    Else
        Return dtDate.AddDays(((Integer.Parse(System.DayOfWeek.Saturday) - Integer.Parse(dtDate.DayOfWeek) + Integer.Parse(desiredDayOfWeek)) Mod 7) + 1)
    End If
End Function

使用方法はこんな感じです。

Dim year As Integer = 2011
Dim weekNum As Integer = 50
Dim dtMonday As DateTime = GetFirstDateOfWeek(weekYear, weekNum)

※「指定した日付から直近(未来)の指定した曜日の日付を取得する」メソッドに関しては、アジャイルプログラマの日常様のC# で指定した曜日の日を取得をもとに、VBに変換致しました。

2011年12月7日水曜日

[VB.NET] 最小化時に発生するイベント

ウィンドウ右上の最小化ボタンをクリックすると、「Resize」イベントが発生します。Resizeイベントを処理するメソッドの中で「Me.WindowState」を見ることで、最小化時の処理を行います。
こんな感じ

Private Sub Form1_Resize(sender As Object, e As System.EventArgs) Handles Me.Resize
    If Me.WindowState = FormWindowState.Minimized Then
        '最小化時に行う処理を記述
    End If
End Sub

2011年11月24日木曜日

Visual Studio 2010で.Net Framework 4.0 Fullを使う

Visual Studio 2010でデフォルトで使用されるのは、4.0のClient Profileです。
でもlog4netを使いたかったりすると、Full版が必要になります。(Client ProfileにはSystem.webが入っていません)
ちょっと検索をしてみると、

「プロジェクトのプロパティ」 → 「アプリケーション」タブに 「対象のフレームワーク」という項目がありそこから変更できる

っていうのを幾つか見つけられたのですが、プロパティを覗いてもそんな項目はみつかりません。
最初はVisual Studio 2010 Proのライセンスがうまく認識されていないのか、とか思ったのですが、そうではありませんでした。これ、C#とVBで設定項目の場所が違うのです。
C#だと 上記の場所で変更できるのですが、VBだと、

「プロジェクトのプロパティ」  → 「コンパイル」タブ → 「詳細コンパイルオプション」にて変更できます。

2011年9月5日月曜日

[ASP.NET]StrConvでひらがな・半角カナ変換でエラーが出る 時の対処法

StrConvでひらがな・半角カナ変換をしようとしたところ、 開発環境では動いたのに、サーバーにのせたら下記のエラーが出てしまいました。

System.ArgumentException: This system does not contain support for the Japanese locale.

原因は読んでそのまま、OSが日本語をサポートしていないからです。
まずは.NET Frameworkの日本語language packがインストールされているか確認しましょう。
インストールされていなかったらインストールしてください。
language packがインストールされているのにひらがな・ 半角 カナ変換できないぞゴルァ! という時は、OSの言語が日本語になっていない可能性があります。
そんな時はOSの言語を日本語に設定するか、あるいはStrConvの第三引数に日本語LocaleID(1041)を指定します。

Dim strExample As String = "ほげほげ"
Dim strResult As string = ""
strResult = Strings.StrConv(strExample, VbStrConv.Katakana + VbStrConv.Narrow, 1041)
'--------------------------------
'結果;
'strResult = "ホゲホゲ"

後々のメンテナンスとかサーバが変わった時のことを考えると、LocaleIDを指定しておいた方がいいような気がします。