java
1public class MainXXX {
2 public static void main(String[] args) {
3 String[] strs = {
4 "2018/01/01", "2018/1/2", "18/01/03", "18/1/4", "180105",
5 "20190101", "2019-01-02"
6 };
7 for (String str : strs) {
8 try {
9 System.out.println(str + "\t->" + normalized_date_str(str));
10 } catch (Exception e) {
11 // e.printStackTrace();
12 System.out.println("Bad Format: [" + str + "]");
13 }
14 }
15 }
16 static String normalized_date_str(String str) throws Exception {
17 String x;
18 if (str.length() == 6 && str.indexOf("/") < 0) {
19 x = str.substring(0, 2) + "/" + str.substring(2, 4) + "/" + str.substring(4, 6);
20 } else {
21 x = str;
22 }
23 String[] nums = x.split("/");
24 int y = Integer.parseInt(nums[0]);
25 int m = Integer.parseInt(nums[1]);
26 int d = Integer.parseInt(nums[2]);
27 if (y < 100) {
28 y += 2000;
29 }
30 return String.format("%d/%02d/%02d", y, m, d);
31 }
32}
実行例

2018/02/30 をエラーにするなどの処理はしていません。
チェックが必要なら、変換結果の "yyyy/mm/dd" を Data クラスで parse してチェックればよいです。