为什么在Java中将String解析为Date很慢?我们可以加速吗?

Ram*_*ami 6 java date date-parsing simpledateformat

我正在读取包含日期的文本文件,我想在Java中将表示日期的字符串解析为Date对象.我注意到操作很慢.为什么?有没有办法加速呢?我的文件看起来像:

2012-05-02 12:08:06:950, secondColumn, thirdColumn
2012-05-02 12:08:07:530, secondColumn, thirdColumn
2012-05-02 12:08:08:610, secondColumn, thirdColumn
Run Code Online (Sandbox Code Playgroud)

我正在逐行读取文件,然后我String从每一行获取日期,然后我Date使用SimpleDateFormat如下方法将其解析为对象:

DataInputStream in = new DataInputStream(myFileInputStream);
BufferedReader  br = new BufferedReader(new InputStreamReader(in));
String strLine;

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
while ((strLine = br.readLine()) != null)
{
    ....Do things....
    Date myDateTime = (Date)formatter.parse(myDateString);
    ...Do things....
}
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 6

日期和时区的转换是昂贵的.如果您可以假设您的日期/时间彼此相似,则可以在每分钟更改时转换日期和小时/分钟(或仅在您使用GMT时的日期),并自行生成秒数.

这将parse每分钟拨打一次.根据您的假设,您可以每小时或每天一次.

String pattern = "yyyy-MM-dd HH:mm";
SimpleDateFormat formatter = new SimpleDateFormat(pattern);
String lastTime = "";
long lastDate = 0;
while ((strLine = br.readLine()) != null) {
    String myDateString = strLine.split(", ")[0];
    if (!myDateString.startsWith(lastTime)) {
        lastTime = myDateString.substring(0, pattern.length());
        lastDate = formatter.parse(lastTime).getTime();
    }
    Date date = new Date(lastDate + Integer.parseInt(myDateString.substring(pattern.length() + 1).replace(":", "")));
}
Run Code Online (Sandbox Code Playgroud)