【问题标题】:Converting US date to EU date in java在java中将美国日期转换为欧盟日期
【发布时间】:2015-12-17 11:21:59
【问题描述】:

不使用“日期格式”或类似的东西,我试图将美国日期字符串“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)

【问题讨论】:

  • 提示:System.out.println((int) '/'); 打印 47。
  • 您介意再详细说明一下吗?
  • 您给substring 提供了/ 字符,意思是“整数47”。它不是所述字符的索引
  • 有一个framework
  • 哦,好的,所以我需要将子字符串更改为 indexOf?

标签: java string date


【解决方案1】:
Scanner kbd = new Scanner(System.in);
        String usString = kbd.nextLine();
        String[] stringArray = usString.split("(\\/|\\.)");
        String month = stringArray[0];
        String day = stringArray[1];
        String year = stringArray[2];
        System.out.println("m"+month+"d"+day+"y"+year);

这段代码展示了如何使用 RegEx 将字符串拆分成一个字符串数组,然后可以在没有 DateFormat 类的情况下将其重新组装成 EU 格式。

【讨论】:

  • 在 qustion 我说我不能使用日期格式或类似的东西,其中包括 SimpleDateFormat 原因是因为我没有被教过。感谢您的意见。
  • 我已经用代码更新了回放,它应该允许您解析由“/”或“.”分隔的日期字符串。
  • 我明白了,这很有帮助。谢谢
【解决方案2】:

为什么不使用 String.split 方法使用“/”作为分隔符来拆分输入字符串。它返回一个字符串数组。只需交换数组的前两个元素。

String usdate = "12/27/2015";
String[] arr = usdate.split("/");
String eudate = arr[1] + "/" + arr[0] + "/" + arr[2];

【讨论】:

    【解决方案3】:

    问题在于java.String.substring 采用两个 int 值,而不是 char 值。 ' / ' 的 int 值是 47,所以 substring 以 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);
        }
    }
    

    【讨论】:

    • 啊,我明白了。我已将字符串日、月、年更改为整数,它运行整个程序,但是当它打印欧盟日期时,当我输入“02/13/2009”时,它给了我-1.-1.5
    • 运行起来更加顺畅,我必须调整几行,以便获得正确的输出。感谢您的帮助
    • 我有一个问题......当我运行程序时,我得到“/day/year.month.year”所以发生的事情是它仍在读取日期字符串周围的 /,并且连同它一起打印年份。你知道是什么原因造成的吗?我使用的任何输入都会发生这种情况。
    • 如果我运行上面的代码,它可以完美运行。您能否发布您所做的更改?根据您描述的问题,+1 和 -1 可能在 indexOf 中搞砸了
    • 嗯,我不太确定如何,但这正是它的含义......我跳过了日期字符串中的“lastIndexOf”。它现在完美无缺。非常感谢您的帮助
    猜你喜欢
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多