質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

4回答

427閲覧

VB.NET 第2、第4木曜日を調べたい

sin777

総合スコア20

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2018/11/07 17:31

DateTimePickerで第2木曜と第4木曜だけ選択させたいと思っています。
今月はきちんと判断出来ていますが、来月6日だと第2木曜と認識してしまうので、
第1木曜日と認識させたいと思っています。
始めの週に木曜日がある場合と無い場合の2通り作るといいのでしょうか。
教えて頂きたいと思います。

VB

1Imports System 2Imports System.Collections.Generic 3Imports System.ComponentModel 4Imports System.Data 5Imports System.Drawing 6Imports System.Linq 7Imports System.Text 8Imports System.Threading.Tasks 9Imports System.Windows.Forms 10Imports System.Text.RegularExpressions 11Imports System.IO 12Imports System.Diagnostics 13Imports Microsoft.WindowsAPICodePack.Dialogs 14 15Public Class Form1 16 17 Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged 18 ' 第2、第4木曜チェック 19 Dim dtp1_day As String = DateTimePicker1.Value.ToString() 20 dtp1_day = dtp1_day.Remove(10) 21 dtp1_day = dtp1_day.Replace("/", "") 22 Dim Day As String = dtp1_day.Remove(0, 6) 23 Dim intday As Integer = Integer.Parse(Day) 24 Dim dt As DateTime 25 dt = DateTimePicker1.Value 26 Dim dow As DayOfWeek 27 dow = dt.DayOfWeek 28 29 If dow <> DayOfWeek.Thursday Then 30 Dim thu_dialog = New TaskDialog() 31 thu_dialog.Caption = "確 認" 32 thu_dialog.InstructionText = " 第2木曜日または" & vbCrLf & " 第4木曜日を選択して下さい。" 33 thu_dialog.Text = "" 34 thu_dialog.Icon = TaskDialogStandardIcon.Warning 35 thu_dialog.StandardButtons = TaskDialogStandardButtons.Ok 36 thu_dialog.Show() 37 Return 38 End If 39 40 If dow = DayOfWeek.Thursday Then 41 Dim aa As Integer = (intday - 1) / 7 ' 第何週目 42 If aa = 0 Or aa = 2 Or aa = 4 Then 43 Dim thu_dialog = New TaskDialog() 44 thu_dialog.Caption = "確 認" 45 thu_dialog.InstructionText = " 第2木曜日または" & vbCrLf & " 第4木曜日を選択して下さい。" 46 thu_dialog.Text = "" 47 thu_dialog.Icon = TaskDialogStandardIcon.Warning 48 thu_dialog.StandardButtons = TaskDialogStandardButtons.Ok 49 thu_dialog.Show() 50 Return 51 End If 52 End If 53 End Sub 54End Class 55 56

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

VB.NETの場合、整数データ型 (Visual Basic)にあるように丸められます。

ですので、計算は

VB.NET

1(intday - 1) / 7

ではなく

VB.NET

1(intday - 1) \ 7

として商を求めるようにしてください。
/で計算すると、6日の場合は0.714~となり、integerにする際に丸められて1となります。

投稿2018/11/08 01:00

編集2018/11/08 01:55
YAmaGNZ

総合スコア10222

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sin777

2018/11/08 02:01

回答有難う御座います。 (intday - 1) \ 7 + 1に変更したら、11月も12月もきちんと判断出来ました。 ありがとうございました。
guest

0

ベストアンサー

月の第2週、というのは日本の法律上では8日~14日のことを指します。
※今月のように1日が木曜日のとき、「第1水曜日」は7日です

※カレンダーは月曜開始だったり日曜開始だったりするので、カレンダーの段で第〇週を考えると環境によって異なってしまいます

ですから y_waiwai さんの書いたように、

  • 月の中の日から1を引き(1~31 が 0~30 になる)
  • その値を7で割り(0~4)
  • その値に1足す(1~5)

ことで、第〇週を得ることができます。

投稿2018/11/08 01:04

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sin777

2018/11/08 02:06

回答有難う御座います。 tacsheavenさんの言う通り1を足さないといけなかったです。 又、(intday - 1) / 7 + 1ではなく、 (intday - 1) \ 7 + 1に変更したら、11月も12月もきちんと判断出来ました。 どうやら割り方も間違っていたようです。 ありがとうございました。
sin777

2018/11/08 02:10

YAmaGNZさんとtacsheavenさんの回答で出来たのですが、 今回は、法律などを教えてくれたtacsheavenさんを ベストアンサーにさせていただきます。
guest

0

日から1引いて、それを7で割って1か3を見ればいいかと

投稿2018/11/07 21:58

編集2018/11/07 21:59
y_waiwai

総合スコア87719

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sin777

2018/11/08 01:54

回答有難う御座います。 回答通りにしていると思ったのですが、もう少し調べてみます。
y_waiwai

2018/11/08 01:59

別回答を参照してくださいw # VBにそんな罠があるなんてしらなんだw
guest

0

DatePartで週の始まり(firstdayofweek)を木曜日(=vbThursday)で指定すれば、ずれなく判断できると思います。

コードの内容からすると、こちらが参考になるかと。

投稿2018/11/08 00:49

編集2018/11/08 01:04
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/11/08 01:13

firstdayofweekで木曜日始まりのカレンダーにしても、駄目ですね。 スルーしてください。
sin777

2018/11/08 01:57

回答有難う御座います。 教えて頂いたリンク先を覗いてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問