回答編集履歴

2

追記

2018/03/15 06:37

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
@@ -25,3 +25,95 @@
25
25
 
26
26
 
27
27
  実際にエラーとなっている行を特定できると、原因を特定しやすくなります。
28
+
29
+
30
+
31
+ #追記
32
+
33
+
34
+
35
+ MtxtBirthDay.Text からどういう値が取れるのか分からないのですが・・・
36
+
37
+ yyyy/M/d でしょうか?
38
+
39
+
40
+
41
+ とりあえず以下 TryParseExact の使用例を書いてみました。
42
+
43
+ TryParse の場合も流れは同じになります。
44
+
45
+
46
+
47
+ ```csharp
48
+
49
+ private void test()
50
+
51
+ {
52
+
53
+ String mtxtBirthDay = "2018/03/15";
54
+
55
+
56
+
57
+ DateTime BD;
58
+
59
+
60
+
61
+ if (! DateTime.TryParseExact(mtxtBirthDay, "yyyy/MM/dd", null, System.Globalization.DateTimeStyles.None, out BD))
62
+
63
+ {
64
+
65
+ System.Diagnostics.Debug.WriteLine("生年月日を正しく入力してください");
66
+
67
+ }
68
+
69
+ else
70
+
71
+ {
72
+
73
+ int age = DateTime.Today.Year - BD.Year;
74
+
75
+ if (BD > DateTime.Today.AddYears(-age)) age--;
76
+
77
+
78
+
79
+ System.Diagnostics.Debug.WriteLine("[" + age + "]");
80
+
81
+ }
82
+
83
+ }
84
+
85
+ ```
86
+
87
+
88
+
89
+ alg さんも書かれていますが、TryParse (TryParseExact) の戻り値を見て
90
+
91
+ DateTime 型に変換できる値か出来ない値かを判定します。
92
+
93
+ なお 変換できる場合は true, できない場合は false が返ります。
94
+
95
+
96
+
97
+ TryParse で「DateTime型に変換できる値かどうか」のチェックは出来るので、
98
+
99
+ MtxtBirthDay.Text.StartsWith(" ")
100
+
101
+ でのチェックは要らなくなるかなと思います。
102
+
103
+
104
+
105
+ 単純な日付文字列であれば TryParse で変換できるかな?
106
+
107
+ たとえば "★2018★ 03-15" みたいな独自の書式の場合は TryParseExact に "★yyyy★ MM-dd" を指定して変換したりします。
108
+
109
+
110
+
111
+ なお TryParseExact() の第2引数でフォーマットを指定していますが、
112
+
113
+ "yyyy/MM/dd" だと "2018/03/15" は変換できますが "2018/3/15" は変換できません。
114
+
115
+ "yyyy/M/d" だと両方変換できます。
116
+
117
+ もし日付文字列が "2018-03-05" であれば 書式は "yyyy-MM-dd" とする必要があります。
118
+
119
+ (この辺は「C# 日付 書式」とかでぐぐると出てきますかね)

1

追記

2018/03/15 06:37

投稿

sk_3122
sk_3122

スコア1126

test CHANGED
@@ -9,3 +9,19 @@
9
9
 
10
10
 
11
11
  ※あとこれ SQL は関係ないですかね? C# のエラーじゃないでしょうか。
12
+
13
+
14
+
15
+ ----
16
+
17
+
18
+
19
+ ちなみに、C# が吐いているエラーだとすると、エラー情報の中に line:123 みたいな情報が入っていないでしょうか。
20
+
21
+ それは 実際にエラーとなっている行番号なので、それを見るとどのファイルの何行目でエラーになっているかが分かります。
22
+
23
+ 今回のエラーだと DateTime.Parse() をしている箇所を指しているのではないかと思います。
24
+
25
+
26
+
27
+ 実際にエラーとなっている行を特定できると、原因を特定しやすくなります。