apache poi excel小时格式设置单元格值java

apache poi excel小时格式设置单元格值java,java,excel,apache-poi,Java,Excel,Apache Poi,我正在进行Excel生成工作,还完成了Excel中的所有功能,但出现了一个问题。我想设置一个单元格值,如HH:MM only not date。我有一根像12:45,36:30102:50的线。对于每个单元格,但我想检测这些单元格在Excel中的时间格式是否大于24小时,如果我选择这些单元格,则在Excel中显示小时总数。我不知道怎么做。我在stack()上找到了一篇类似的文章,但这篇文章只展示了如何读取这些单元格。我想设置一个单元格值,如大于24小时格式,仅小时和分钟,如25:00、205:0

我正在进行Excel生成工作,还完成了Excel中的所有功能,但出现了一个问题。我想设置一个单元格值,如HH:MM only not date。我有一根像12:45,36:30102:50的线。对于每个单元格,但我想检测这些单元格在Excel中的时间格式是否大于24小时,如果我选择这些单元格,则在Excel中显示小时总数。我不知道怎么做。我在stack()上找到了一篇类似的文章,但这篇文章只展示了如何读取这些单元格。我想设置一个单元格值,如大于24小时格式,仅小时和分钟,如25:00、205:00、152:30


你能帮我吗?我真的很欣赏你的效果

将评论升级为答案

Excel将日期存储为自1900年或1904年以来的整数天,具体取决于设置。。。(里面有一些闰年问题)。Excel将时间存储为一天的分数。因此,在1900窗口文件上,根据使用的格式字符串

0.1 = 02:24:00
0.5 = 12:00:00
1.5 = 1900-01-02 12:00:00
1.5 = 36:00:00
因此,如果您想存储和显示36小时,请计算出一天的分数(1.5),然后对其应用支持>36小时的格式字符串。格式为
HH:MM
,您将得到
12:00
。格式为
[HH]:MM
,您将得到
36:00


使用Excel计算您需要的格式字符串-POI只需将您提供的格式字符串写入文件,Excel将其呈现,就像您在Excel中编写一样

最后我从@gagravr-answer得到了解决方案

下面是将12:00转换为0.5或其他的代码

                            Date inserted_date = time_format.parse((String) obj);
                            CellStyle cellStyle = workbook.createCellStyle();
                            cellStyle.setDataFormat(createHelper.createDataFormat().getFormat("[HH]:MM"));
                            Calendar calendar = Calendar.getInstance();
                            calendar.setTime(inserted_date);
                            int hours = calendar.get(Calendar.HOUR_OF_DAY);
                            int minutes = calendar.get(Calendar.MINUTE);

                            //System.out.println("\nHOUR :"+hours+"\n");
                            //System.out.println("\nMINS :"+minutes+"\n");
                            //System.out.println("\nCALC :"+ hours/24d+(minutes/60d)/24d +"\n");
                            cell.setCellValue(hours / 24d + (minutes / 60d) / 24d);
                            cell.setCellStyle(cellStyle);

此代码仅插入时间并在excel工作表上自动对所选单元格求和。

如果您告诉Apache POI为这些数字设置与您在excel中为这些数字设置的格式字符串相同的格式字符串,会发生什么情况?数字的计算与1小时某物的计算不同?excel使用1900/1904年以来的天数,以分数表示小时,因此0.5是12:00,1.5是36:00还是1900-01-02T12:00:00取决于您是将其格式化为日期还是小时!谢谢你的建议,我终于找到了解决方案,我的答案如下:)你可以像下面这样添加秒:cell.setCellValue(小时/24d+(分钟/60d)/24d+(秒/60d/60d)/24d);