【问题标题】:Parsing and converting Datetime format from csv file to mysql in Java在Java中解析并将日期时间格式从csv文件转换为mysql
【发布时间】:2013-11-29 16:38:11
【问题描述】:

我有一个 csv 文件,其中日期时间列以“DD-MM-YYYY HH:MM”格式定义。但问题是 MySQL 仅接受 Datetime 类型为“YYYY-MM-DD HH:MM”。我想将 csv 文件中给出的格式转换为 MySQL 定义的格式,但我无法做到。我试图在 excel 中转换格式,但首先在 excel 中没有日期时间格式,如果我将列分成两列然后它改变了我的文件的结构,因此无法插入数据库。所以,唯一的选择是使用 Java 程序并在插入之前更改格式。 谁能在这方面给我一些帮助?

这是我的课程,它被要求转换格式,但我不知道这里出了什么问题以及它是否足够或我遗漏了什么。(这个课程正在从另一个程序访问。)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class DateUtil {

    // List of all date formats that we want to parse.
    // Add your own format here.
    private static List<SimpleDateFormat> 
            dateFormats = new ArrayList<SimpleDateFormat>() {
        private static final long serialVersionUID = 1L; 
        {
//            add(new SimpleDateFormat("M/dd/yyyy"));
//            add(new SimpleDateFormat("dd.M.yyyy"));
//            add(new SimpleDateFormat("M/dd/yyyy hh:mm:ss a"));
//            add(new SimpleDateFormat("dd.M.yyyy hh:mm:ss a"));
//            add(new SimpleDateFormat("dd.MMM.yyyy"));
            add(new SimpleDateFormat("dd-MM-yyyy hh:mm"));
            add(new SimpleDateFormat("yyyy-MM-dd hh:mm"));
        }
    };

    /**
     * Convert String with various formats into java.util.Date
     * 
     * @param input
     *            Date as a string
     * @return java.util.Date object if input string is parsed 
     *          successfully else returns null
     */
    public static Date convertToDate(String input) {
        Date date = null;
        if(input == null ) {
            return null;
        }
        for (SimpleDateFormat format : dateFormats) {
            try {
                format.setLenient(false);
                date = format.parse(input);
            } catch (ParseException e) {
                //Shhh.. try other formats
            }
            if (date != null) {
                break;
            }
        }

        return date;
    }

}

【问题讨论】:

  • Excel .. Java .. 哇?选择一个 :) 首先在 Excel 中修复 (CSV) 数据(这样在 Java 处理它时它是“正确的”)或在 Java 中正确处理它。 Java 将这种日期时间格式解析为 Date 对象没有问题,然后可以与 MySQL 一起使用(实际上,应该将日期而不是字符串插入到 datetime 列中!)。请参阅stackoverflow.com/questions/16598650/… 和类似内容。
  • csv 文件包含“DD-MM-YYYY HH:MM”格式的数据,我想将其转换为“YYYY-MM-DD HH:MM”。
  • 别再想字符串了。将String 转换为Date(例如,使用具有适当格式的SimpleDateFormat),然后将Date 作为参数传递给适用的MySQL 插入代码。数据库驱动程序将依次获取Date 并将其作为适当的DATETIME 类型插入数据库中。 (但如果您想要一个String,那么您可以从Date 对象创建一个[具有适用格式]。)
  • @user2864740 请参阅上面帖子中的编辑。我尝试过 SimpleDateFormat 但没有成功。

标签: java mysql datetime csv


【解决方案1】:

这是一个如何通过SimpleDateFormat 类更改格式的示例。

public static String dateConvert(String origFormat) throws ParseException {
    SimpleDateFormat origDateFormat = new SimpleDateFormat("dd-MM-yyyy hh:mm");
    SimpleDateFormat newDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    Date retrivedDate = origDateFormat.parse(origFormat);
    return newDateFormat.format(retrivedDate);
}

【讨论】:

    【解决方案2】:

    如果我理解正确,您有一个包含日期列的 csv 文件,但以“DD-MM-YYYY HH:MM”格式存储为字符串,并且您希望它的格式为“YYYY-MM-DD HH” :MM" 让 mySql 开心。

    如果是,你为什么不直接使用excel来完成这项工作:

    • 在文件中添加新列,例如:

      日期 DD-MM-YYYY HH:MM |日期 YYYY-MM-DD HH:MM

      01-02-2013 23:59 | 2013-02-01 23:59

    新添加的列会有这个公式 "=MID(A2,7,4)&"-"&MID(A2,4,2)&"-"&LEFT(A2, 2)&" "&RIGHT(A2, 5)"

    • 现在您的新列已将日期存储为所需格式的字符串,只需将该列复制到记事本,然后从记事本复制回粘贴到第一列

    • 删除新的(第二个)列并再次将文件另存为 csv。

    【讨论】:

    • 我试图这样做,但输出无法理解。实际上在文本中,如果第 7 位是 2013 年的 2,那么它正在阅读 9,这在整个文本中都没有。
    • 你能把你的数据的代表性样本放在这里吗,我相信我们可以通过excel解决它
    【解决方案3】:

    看看SimpleDateFormat 类 - 您可以使用它来将传入的文本解析为日期。

    【讨论】:

    • 我尝试了 SimpleDateFormat 但我无法成功。请在帖子中检查上面的编辑。
    • 日期格式看起来正确。您能否编写一些代码直接使用日期格式(而不是通过 util 类)并从 csv 复制/粘贴日期,然后让我知道会发生什么?具体我想知道有没有例外。
    • 我试图调试它,问题是它没有被转换成所需的格式。基本上它返回 null 给调用这个类的程序。所以,这个 null 它抛出异常为格式不支持
    • @user2916886 您从 CSV 读取的格式可能有问题。您可以在此处复制并粘贴该文件的一整行作为注释吗?
    • 这是csv文件的第一行-“2013-01-01 21:56:29”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-23
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多