当前位置: 首页 > 知识库问答 >
问题:

以双重格式获取日期43318.4847916667,而不是06-08-2018 11:38:06

黄浩涆
2023-03-14

我正在编写java代码来使用HSSFWorkbook(. xls)生成excel文件。我需要以这种格式在一列中写入日期06-08-2018 11:38:06但它是这样生成的43318.4847916667。
这是我使用的代码片段。请帮助我如何才能成功地编写

Workbook workbook = new HSSFWorkbook();
Sheet excelSheet = workbook.createSheet();
Row dataRow = excelSheet.createRow(1);;
Cell dataCell = dataRow.createCell(1);;
CellStyle cStyle = workbook.createCellStyle();
CreationHelper createHelper = workbook.getCreationHelper();         
cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));
dataCell.setCellValue(new Date());
dataCell.setCellStyle(cStyle);

共有3个答案

邹昊
2023-03-14

按照以下代码在DD-MM-YYYY HH:MM:ss中打印日期。

String fileName = "myExcel.xls";
WritableWorkbook writableWorkbook = null;
response.setContentType("application/vnd.ms-excel");
writableWorkbook = Workbook.createWorkbook(response.getOutputStream());
WritableSheet excelOutputsheet = writableWorkbook.createSheet("Sheet1", 0);

DateFormat customDateFormatWithTime = new DateFormat("dd-MM-yyyy HH:mm:ss");
WritableCellFormat dateFormatWithTime = new 
WritableCellFormat(customDateFormatWithTime);

int row = 0;
int col = 0;
excelOutputsheet.setColumnView(col, 20);
Label lable1 = new Label(col, row, "Date and Time", cellFormat);
excelOutputsheet.addCell(lable1);

row = row + 1;
col = col + 1;
DateTime myDate = new jxl.write.DateTime(col, row, "Value", dateFormatWithTime);
excelOutputsheet.addCell(myDate);
靳彦
2023-03-14

如果您想要"06-08-2018 11:38:06",那么您的日期格式应该是"dd-MM-YYYY HH: mm: ss"。否则,您只是缺少需要将工作簿写入的FileOutputStream

private static final String FILE_NAME = "./out/MyFirstExcel.xls";

public static void main(String ... args) {
    Workbook workbook = new HSSFWorkbook();
    Sheet excelSheet = workbook.createSheet();
    Row dataRow = excelSheet.createRow(1);
    Cell dataCell = dataRow.createCell(1);
    CellStyle cStyle = workbook.createCellStyle();
    CreationHelper createHelper = workbook.getCreationHelper();
    cStyle.setDataFormat(createHelper.createDataFormat().getFormat("dd-MM-YYYY HH:mm:ss"));
    dataCell.setCellValue(new Date());
    dataCell.setCellStyle(cStyle);

    try {
        File file = new File(FILE_NAME);
        if(!file.exists()) {
            file.createNewFile();
        }
        FileOutputStream outputStream = new FileOutputStream(file);
        workbook.write(outputStream);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
东方旭东
2023-03-14

无法重现问题。

下面的完整示例生成了一个Excel工作簿,该工作簿在单元格B2中有一个工作表和一个正确格式的日期。

代码:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelDate {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new HSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {

   CellStyle cStyle = workbook.createCellStyle();
   CreationHelper createHelper = workbook.getCreationHelper();         
   cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));

   Sheet excelSheet = workbook.createSheet();
   Row dataRow = excelSheet.createRow(1);;
   Cell dataCell = dataRow.createCell(1);;
   dataCell.setCellValue(new java.util.Date());
   dataCell.setCellStyle(cStyle);

   excelSheet.setColumnWidth(1, 25 * 256);

   workbook.write(fileout);
  }

 }
}

结果:

从你的评论来看,你的问题并没有显示全部。行有一个循环,每行都应创建一个日期。这只适用于第42排。

这个问题众所周知。Excel对每个工作簿的单元格样式计数有限制。请参见:Excel规范和限制。

因此,如果你在循环中一遍又一遍地创建一个新的单元样式,这个极限有时会达到。但是,您不必总是在循环中创建新的单元样式。单元格样式存储在工作簿级别。只要在循环外创建所需的单元样式即可。然后仅将先前创建的单元样式应用于循环中的单元。

以下内容适用于我,并创建了1000个正确格式的日期:

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

class CreateExcelDate {

 public static void main(String[] args) throws Exception {

  try (Workbook workbook = new HSSFWorkbook(); 
       FileOutputStream fileout = new FileOutputStream("./Excel.xls") ) {

   CellStyle cStyle = workbook.createCellStyle();
   CreationHelper createHelper = workbook.getCreationHelper();         
   cStyle.setDataFormat(createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss"));

   Sheet excelSheet = workbook.createSheet();

   for (int r = 1; r < 1000; r++) {
    Row dataRow = excelSheet.createRow(r);;
    Cell dataCell = dataRow.createCell(1);;
    dataCell.setCellValue(new java.util.GregorianCalendar(2019, 9, r));
    dataCell.setCellStyle(cStyle);
   }

   excelSheet.setColumnWidth(1, 25 * 256);

   workbook.write(fileout);
  }

 }
}
 类似资料:
  • 问题内容: 我需要将当前日期添加到JDBC调用的准备好的语句中。我需要以格式添加日期。 我试过了 但是我有这个错误: 有没有办法获取具有相同格式的对象? 问题答案: A 不是。相反。A 是一个。 您需要将其转换为使用,需要一个构造函数,一个可以提供。

  • 问题内容: 我正在尝试以HTTP 1.1中指定的格式获取Java中日期的字符串。据我所知,这是: 1999年12月31日,星期五,格林尼治标准时间23:59:59 时间一直在格林​​尼治标准时间。 从Date / Calendar /获取此信息的最简单方法是什么? 问题答案: 如果有人试图在这里找到答案(就像我一样),这就是解决问题的方法: 以便将服务器设置为说英语,并在GMT时区指定时间。

  • 我正在寻找将PHP日期格式(即Y-m-d H:I:s)转换为javascript日期格式(分别为YYYY-mm-dd HH:mm:ss)的简单方法。 我不想转换日期(这个问题已经有答案),我正在寻找工具/函数来转换格式代码(我还不知道,因为它是由应用程序中的用户定义的)。 用户可以用PHP date()定义的不同方式来定义它,即“Y/m/d H:i”或“Y-d-m H-i”,在javascript

  • 问题内容: 我正在寻找一种简单的方法来将PHP日期格式(即Ymd H:i:s)转换为javascript日期格式(分别为YYYY-mm-dd HH:mm:ss)。 我不想转换日期 (这个问题已经有答案),我正在寻找工具/函数来 转换格式代码(我尚不知道,因为它是由用户在应用程序中定义的) 。 用户可以通过PHP date()即“ Y / m / d H:i”或“ YdmHi”定义的不同方式来定义它

  • 问题内容: 我有以下日期: 。这是什么格式?我正在尝试通过Java 1.4解析它,并且 :无法解析的日期: 我想我应该使用SimpleDateFormat进行解析,但是我必须首先知道格式字符串。到目前为止,我所拥有的只是,因为我不知道T该字符串的含义是什么-与时区有关?此日期字符串来自“ 文件CMIS下载历史记录”媒体类型上显示的标签。 问题答案: T只是将日期和时间分开的文字,Z表示“零时偏移”

  • 问题内容: 我已经用python与selenium结合编写了一个脚本,以解析网页中表格中的一些可用日期。该表位于标题下。表格数据位于id内。你可以看到三个日期还有,和。我希望根据我下面的预期输出来解析和排列它们。 网页连结 到目前为止,这是我的尝试: 目前,我的输出如下: 我的预期输出: 问题答案: 尝试使用以下代码: