teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

Date-Time API

2015/11/15 10:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -13,4 +13,35 @@
13
13
  System.out.println("誤りがあります");
14
14
  }
15
15
 
16
+ ```
17
+ ---
18
+
19
+ ちなみに、Java8のDate-Time APIを使って書いた例がこうなります。
20
+ ```java
21
+ import java.time.DateTimeException;
22
+ import java.time.LocalDate;
23
+ import java.time.format.DateTimeFormatter;
24
+ import java.util.InputMismatchException;
25
+ import java.util.Scanner;
26
+
27
+ public class InputCal2 {
28
+
29
+ public static void main(String[] args) {
30
+ try (Scanner s = new Scanner(System.in)){
31
+ System.out.print("年を入力:");
32
+ int year = s.nextInt();
33
+ System.out.print("月を入力:");
34
+ int month = s.nextInt();
35
+ System.out.print("日を入力:");
36
+ int dayOfMonth = s.nextInt();
37
+ LocalDate date = LocalDate.of(year, month, dayOfMonth);
38
+ System.out.println(date.format(DateTimeFormatter.ofPattern("yyyy年M月d日(E)")));
39
+ } catch (InputMismatchException e) { //s.nextInt()からの例外
40
+ System.out.println("数値ではない文字が入力されました");
41
+ } catch (DateTimeException e) { //LocalDate.of()からの例外
42
+ System.out.println("入力された数値に誤りがあります");
43
+ }
44
+ }
45
+
46
+ }
16
47
  ```

2

Stringということに今気づいた

2015/11/15 10:09

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  Calendarクラスを使うのが便利かと思います。厳密モードにすれば、ありえない数値が入った状態でCalendarの値を取得しようとした時に例外が発生します。
2
2
  ```java
3
- //年月日の入力後
3
+ //年月日の入力後、Integer.parseInt()などで数値に変換して(変数名はそのままになってしまっています)
4
4
  Calendar calendar = Calendar.getInstance();
5
5
  calendar.setLenient(false); //厳密モードに切り替え
6
6
  calendar.set(Calendar.YEAR, year);

1

月フィールドでミス

2015/11/15 09:44

投稿

swordone
swordone

スコア20675

answer CHANGED
@@ -4,7 +4,7 @@
4
4
  Calendar calendar = Calendar.getInstance();
5
5
  calendar.setLenient(false); //厳密モードに切り替え
6
6
  calendar.set(Calendar.YEAR, year);
7
- calendar.set(Calendar.MONTH, month);
7
+ calendar.set(Calendar.MONTH, month - 1); //月のフィールドは0始まりなので1引かなければいけない
8
8
  calendar.set(Calendar.DATE, day);
9
9
  DateFormat sdf = new SimpleDateFormat("yyyy'年'M'月'd'日('E')'");
10
10
  try{