java程序转换excel中科学记数法的数据为date类型

本文介绍如何将从MongoDB导出的Excel文件中的时间戳字段转换为日期格式。通过Java程序使用Apache POI库实现了毫秒级时间戳到日期类型的转换,并详细展示了具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天出于某些原因从mongodb数据库中导出了一些数据,为了更直观的发送给其他人查阅,便使用mongoVUE的导出为excel功能。

但是导出后出现了一个问题,里边有一列存储时间的,存储的是long型毫秒数,在导出后就自动变成了科学记数法。

且不说从科学记数法中辨别出实际时间,即便是原本的毫秒值也是不易于辨别的,但是这些long值不能直接在excel中转换成date类型,因此我便想到使用poi来把这些毫秒值转换成date再写入原文件中。

从mongodb中导出的excel的科学记数法如下图:




java程序如下:
package excelDemo1;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.DecimalFormat;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * java读取excel文件及内容
 * 
 * @author tuzongxun123
 *
 */
public class ExcelDemo1 {
    public static void main(String[] args) {
        try {
            // 获取文件在磁盘的存储路径
            File file = new File("C:" + File.separator + "Users"
                    + File.separator + "tuzongxun123" + File.separator
                    + "Desktop" + File.separator + "log.xls");
            // 读文件输入流
            FileInputStream fileInputStream = new FileInputStream(file);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(
                    fileInputStream);
            POIFSFileSystem excelfile = new POIFSFileSystem(bufferedInputStream);
            HSSFWorkbook workbook = new HSSFWorkbook(excelfile);
            // 根据名称获取excel工作薄
            HSSFSheet sheet = workbook.getSheet("Sheet0");
            // 遍历去除工作薄中的行和列
            for (int i = 1;; i++) {
                HSSFRow row = sheet.getRow(i);
                if (row != null) {
                    // 获取科学记数法这一列的单元格
                    HSSFCell cell = row.getCell(6);
                    // 格式化科学计数法的数据格式
                    DecimalFormat df = new DecimalFormat("0");
                    String value = df.format(cell.getNumericCellValue());
                    // 时间转换
                    long long1 = Long.parseLong(value);
                    Date date = new Date(long1);
                    // 创建新的单元格存储转换后的数据
                    HSSFCell cell2 = row.createCell(9);
                    cell2.setCellValue(date);
                } else {
                    break;
                }
            }
            // 把转换后的数据写入到文件中
            OutputStream outputStream = new FileOutputStream(file);
            workbook.write(outputStream);
            outputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}



运行程序后excel中新增一列的数据如下图:



在excel中把 这一列单元格的格式设置为时间类型后,就会看到数据变成了正确的时间格式,如下图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值