在java中将美国日期转换为EU日期

时间:2015-09-20 19:59:55

标签: java string date

不使用" dateformat"或者其他类似的东西,我试图改变一串美国日期" mm / dd / yyyy"欧盟格式" dd / mm / yyyy"。我是使用字符串和字符串方法来做到这一点。我觉得我非常接近这一点,但无法弄明白。 这是我的代码:

import java.util.Scanner;

public class DateChange {

    public static void main(String[] args) {
        Scanner kbd = new Scanner(System.in);
        String usDate, euDate, day, month;
        int year;
        System.out.println("Enter a date in the form month/day/year:");
        usDate = kbd.nextLine();
        month = usDate.substring(0, '/');
        day = usDate.substring('/', '/');
        year = usDate.lastIndexOf('/');
        euDate = day + "." + month + "." + year;
        System.out.println("Your date in European form is:");
        System.out.println(euDate);
    }

}

这是我得到的错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 47
    at java.lang.String.substring(String.java:1963)
    at DateChange.main(DateChange.java:12)

2 个答案:

答案 0 :(得分:1)

为什么不使用'{'作为分隔符使用方法do.call(rbind…拆分输入字符串。它返回一个字符串数组。只需交换数组的前两个元素。

String.split

答案 1 :(得分:1)

问题是java.String.substring需要两个 int 值,而不是 char 值。 '的int值/'是47,所以子串将47作为输入,而不是 indexOf ' /'。

如果要在不使用Java库的情况下解决此问题,请使用以下代码:

import java.util.*;

public class DateChange {
    public static void main(String[] args) {
        Scanner kbd = new Scanner(System.in);
        String usDate, euDate, day = "", month = "", year = "";
        System.out.println("Enter a date in the form month/day/year:");
        usDate = kbd.nextLine();
        kbd.close();
        month = usDate.substring(0, usDate.indexOf("/"));
        day = usDate.substring(usDate.indexOf("/")+1, usDate.lastIndexOf("/"));
        year = usDate.substring(usDate.lastIndexOf("/")+1, usDate.length());
        euDate = day + "." + month + "." + year;
        System.out.println("Your date in European form is:");
        System.out.println(euDate);
    }
}