Java中不带日期的写入时间格式(hh:mm:ss)

Java中不带日期的写入时间格式(hh:mm:ss),java,excel,apache-poi,Java,Excel,Apache Poi,我正在尝试将包含多个工作表的Excel(.xls)文件转换为.csv文件。代码运行良好,但我注意到某些列的数据类型正在从time数据类型更改为double数据类型 示例:如果我的输入是00:45:20,则得到的输出类似于0.006168981481482。每个工作表都有使用时间数据类型的列 注意:我的输入没有日期部分。只有时间成分存在。我看到了一些与此相关的帖子,并尝试了同样的方法。但是java代码只打印默认日期,不包括时间部分 我觉得必须在case语句中修改一些内容来填充时间数据类型。我希望有

我正在尝试将包含多个工作表的Excel(.xls)文件转换为.csv文件。代码运行良好,但我注意到某些列的数据类型正在从time数据类型更改为double数据类型

示例:如果我的输入是
00:45:20
,则得到的输出类似于
0.006168981481482
。每个工作表都有使用时间数据类型的列

注意:我的输入没有日期部分。只有时间成分存在。我看到了一些与此相关的帖子,并尝试了同样的方法。但是java代码只打印默认日期,不包括时间部分

我觉得必须在case语句中修改一些内容来填充时间数据类型。我希望有一个通用的程序,这样每当有时间数据类型时,我都必须以相同的格式编写它。我使用的代码是:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;

import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;

public class exceltst 
{
    static void xls(File inputFile, File outputFile,int sheet_num) 
    {
        // For storing data into CSV files
        StringBuffer data = new StringBuffer();
        try 
        {
        FileOutputStream fos = new FileOutputStream(outputFile);

        // Get the workbook object for XLS file
        HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile));
        // Get first sheet from the workbook
        HSSFSheet sheet = workbook.getSheetAt(sheet_num);
        Cell cell; 
        Row row;

        // Iterate through each rows from first sheet
        Iterator<Row> rowIterator = sheet.iterator();
        while (rowIterator.hasNext()) 
        {
                row = rowIterator.next();
                // For each row, iterate through each columns
                Iterator<Cell> cellIterator = row.cellIterator();
                while (cellIterator.hasNext()) 
                {
                        cell = cellIterator.next();

                        switch (cell.getCellType()) 
                        {
                        case Cell.CELL_TYPE_BOOLEAN:
                                data.append(cell.getBooleanCellValue() + ",");
                                break;

                        case Cell.CELL_TYPE_NUMERIC:
                                data.append(cell.getNumericCellValue() + ",");
                                break;

                        case Cell.CELL_TYPE_STRING:
                                data.append(cell.getStringCellValue() + ",");
                                break;

                        case Cell.CELL_TYPE_BLANK:
                                data.append("" + ",");
                                break;

                        default:
                                data.append(cell + ",");
                        }


                }
                data.append('\n');
        }

        fos.write(data.toString().getBytes());
        fos.close();
        }
        catch (FileNotFoundException e) 
        {
                e.printStackTrace();
        }
        catch (IOException e) 
        {
                e.printStackTrace();
        }
        }

        public static void main(String[] args) 
        {
                File inputFile = new File("C:\\Call_Center_20150323.xls");
                File outputFile1 = new File("C:\\live_person.csv");
                xls(inputFile, outputFile1,3);
        }
 }
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.FileNotFoundException;
导入java.io.FileOutputStream;
导入java.io.IOException;
导入java.util.Iterator;
导入org.apache.poi.hssf.usermodel.HSSFSheet;
导入org.apache.poi.hssf.usermodel.HSSFWorkbook;
导入org.apache.poi.ss.usermodel.Cell;
导入org.apache.poi.ss.usermodel.Row;
公共课卓越
{
静态void xls(文件输入文件、文件输出文件、int sheet_num)
{
//用于将数据存储到CSV文件中
StringBuffer数据=新的StringBuffer();
尝试
{
FileOutputStream fos=新的FileOutputStream(outputFile);
//获取XLS文件的工作簿对象
HSSFWorkbook=新的HSSFWorkbook(新文件InputStream(inputFile));
//从工作簿中获取第一张工作表
HSSFSheet sheet=工作簿.getSheetAt(sheet_num);
细胞;
行行;
//从第一张图纸开始遍历每行
迭代器rowIterator=sheet.Iterator();
while(roweiterator.hasNext())
{
行=行迭代器。下一步();
//对于每一行,遍历每一列
迭代器cellIterator=row.cellIterator();
while(cellIterator.hasNext())
{
cell=cellIterator.next();
开关(cell.getCellType())
{
case Cell.Cell\u类型\u布尔值:
data.append(cell.getBooleanCellValue()+“,”);
打破
case Cell.Cell\u类型\u数值:
data.append(cell.getNumericCellValue()+“,”);
打破
case Cell.Cell\u类型\u字符串:
data.append(cell.getStringCellValue()+“,”);
打破
case Cell.Cell\u类型\u空白:
数据。追加(“+”,”);
打破
违约:
数据。追加(单元格+“,”);
}
}
data.append('\n');
}
fos.write(data.toString().getBytes());
fos.close();
}
catch(filenotfounde异常)
{
e、 printStackTrace();
}
捕获(IOE异常)
{
e、 printStackTrace();
}
}
公共静态void main(字符串[]args)
{
文件输入文件=新文件(“C:\\Call\u Center\u 20150323.xls”);
File outputFile1=新文件(“C:\\live\u person.csv”);
xls(输入文件,输出文件1,3);
}
}
您能帮助我们如何在输出文件中填充不带日期的时间数据类型(hh:mm:ss)而不是双精度数据类型吗

if(cell.getCellType()==Cell.CELL_TYPE_NUMERIC){
        if (DateUtil.isCellDateFormatted(cell)) {
            System.out.println(cell.getDateCellValue());
        } else {
            System.out.println(cell.getNumericCellValue());
        }
}

有关详细信息,请参考

您应该首先创建一个单元格样式,然后为您的时间单元格设置此样式。同样对于cvs文件,您不能创建单元样式,您应该使用excel文件来使用单元样式

对于Excel:

CellStyle style = workBook.createCellStyle();
style.setDataFormat(workBook.createDataFormat().getFormat("hh:mm:ss"));
cell.setCellStyle(style);
cell.setCellValue("16:15:11");
对于cvs文件,应将
单元格的值设置为字符串:

data.append("16:15:11" + ",");

@安德烈亚斯:我也看过那个帖子。但是这里的区别是,我的输入文件中没有日期部分。只有时间部分在那里。因此,当我应用该代码时,它填充了默认日期,而忽略了时间部分。如果您的单元格具有时间格式,则应用该格式应返回
HH:MM:SS
格式的字符串,当然,假设该格式是有问题的格式。然后该字符串直接进入.csv文件。不涉及日期或时间逻辑。