【问题标题】:date and time conversion in java while reading a file读取文件时java中的日期和时间转换
【发布时间】:2012-05-19 10:53:04
【问题描述】:

我在 java 中遇到日期和时间转换问题。

实际上,我正在从一个文件中读取一个字符串,将该字符串拆分并将其存储到一个 字符串数组,现在用这个数组初始化一些变量。我的问题是 我正在将此值保存到另一个文件中,在保存时,日期格式正在更改,我正在发布我的代码。

我正在从文件中读取的字符串:

2012 年 5 月 2 日星期三 12:07:54 EST,测试 1,20 的任务 1

我编写的代码:

String s = br.readLine();
String[] list = s.split(",");
this.description = list[0];                
this.weight = Integer.parseInt(list[1]);
this.dueDate = new Date(list[2]);
//this.dueDate = dateFormat.parse(list[2]);
//SimpleDateFormat dateFormat = new SimpleDateFormat("E,dd MMM yyyy HH:mm.ss");
pw.println(description + "," + weight + "," + dueDate);

我的代码输出:

2012 年 5 月 3 日星期四 03:07:54 EST,测试 1,20 的任务 1

【问题讨论】:

  • 您要么没有显示您的确切代码或您的确切输入 - 您应该在 parseInt 语句中为“测试 1 的任务 1”获得 NumberFormatException。
  • 是的,他尝试从“20”创建日期。
  • 这是读取文件或分割字符串或日期格式的问题吗???

标签: java parsing datetime file-io


【解决方案1】:

您需要使用SimpleDateFormat解析输入日期。

假设您的输入数据按照您发布的格式进行了格式化(因此日期为 list[0]),请将其放入:

SimpleDateFormat dateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
this.dueDate = dateFormat.parse(list[0]);

重要的是您告诉它检查时区 (zzz)。 这应该算出所描述的正确、实际的时间。

如果您只是打印出来,它将(默认情况下)在您的本地时区打印。

【讨论】:

  • 你试过了吗?我不适合我,Wed 和 May 无法在输入中解析。
  • 是的,试过了,对我有用。我正在使用 openjdk -“OpenJDK 运行时环境(IcedTea6 1.10.6)(6b22-1.10.6-0ubuntu1)”。没关系 - 找到自己的解决方案做得很好 - 这就是它的全部意义。
  • 它可能只适用于 OpenJDK,我只有 Oracle JDK,即使是 1.6,它也会抛出 java.text.ParseException
【解决方案2】:

我不同意@GrefHNZ 的回答,因为它不适用于list[0] = Wed May 02 12:07:54 EST 2012。无法在输入中解析 Wed 和 May。

我做了这个解决方案(仅适用于 JDK7):

public static void main(String[] args)
    String s = "Wed May 02 12:07:54 EST 2012,Task 1 for Test 1,20";
    String[] list = s.split(",");
    String dateDesc = list[0];  
    String dateToParse = createStringToParse(dateDesc); //return "3 05 02 12:07:54 CEST 2012"
    SimpleDateFormat dateFormat = new SimpleDateFormat("u MM dd kk:mm:ss z yyyy");
    Date dueDate=null;
    try {
        dueDate = dateFormat.parse(dateToParse);
    } catch (ParseException ex) {
        Logger.getLogger(Test.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println(dueDate); //print "Wed May 02 12:07:54 CEST 2012"
 }
 private static String createStringToParse(String dateDesc) {
    int idx=dateDesc.indexOf(" ");
    String day = dateDesc.substring(0,idx);
    String month = dateDesc.substring(idx+1,dateDesc.indexOf(" ",idx+1));
    String rest = dateDesc.substring(dateDesc.indexOf(month)+month.length());
    switch(day){
        case "Mon" :
            day="1";break;
        case "Tue" :
            day="2";break;
        case "Wed" :
            day="3";break;
        case "Thu" :
            day="4";break;
        case "Fri" :
            day="5";break;
        case "Sat" :
            day="6";break;
        case "Sun" :
            day="7";break;
    }

    switch(month){
        case "Jan" :
            month="01";break;
        case "Feb" :
            month="02";break;
        case "Mar" :
            month="03";break;
        case "Apr" :
            month="04";break;
        case "May" :
            month="05";break;
        case "Jun" :
            month="06";break;
        case "Jul" :
            month="07";break;
        case "Aug" :
            month="08";break;
        case "Sep" :
            month="09";break;
        case "Oct" :
            month="10";break;
        case "Nov" :
            month="11";break;
        case "Dec" :
            month="12";break;
    }

    return day+" "+month+rest.replace("EST", "CEST");
}

要了解SimpleDateFormat,请阅读Oracle documentation

【讨论】:

    【解决方案3】:

    尝试使用.toString() 方法并将您的this.weight 转换为String 而无需解析。

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 2015-10-30
      • 2017-08-08
      • 2016-10-17
      • 1970-01-01
      • 2016-01-20
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多