java读取exls日期 在excel内日期是“2014-11-22”但java输出“14-11-22”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java读取exls日期 在excel内日期是“2014-11-22”但java输出“14-11-22”相关的知识,希望对你有一定的参考价值。

求个大神让日期原样输出帮改下代码!
public class ReadXLS
public static void main(String args[])
try
Workbook book = Workbook.getWorkbook(new File("测试.xls"));
// 获得第一个工作表对象
Sheet sheet = book.getSheet(0);
// 得到第一列第一行的单元格
Cell cell1 = sheet.getCell(1, 0);
String result = cell1.getContents();
System.out.println(result);
book.close();

catch (Exception e)
System.out.println(e);


参考技术A 加个SimpleDateFormat就好了。追问

我的意思 是怎么加啊!我加为什么 会报错啊

追答

在String result = cell1.getContents();下面 补充以下语句试试:

SimpleDateFormat format = new SimpleDateFormat("yyyy-M-dd");
try
System.out.println(format.format(format.parse(result)));
catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();


----------------
需要导包:
import java.text.ParseException;
import java.text.SimpleDateFormat;

追问

不对啊亲

追答

在你原来的String result = cell1.getContents();下面,加一行打印看有没有取到内容出来

System.out.println(result+ "--------");

本回答被提问者采纳
参考技术B SimpleDateFormat 格式化这个字符串即可追问

可以帮我写我代码里我试试吗没怎么看懂
我是个菜鸟谢谢了

追答SimpleDateFormat sdf1 = new SimpleDateFormat ("yy-MM-dd");
SimpleDateFormat sdf2 = new SimpleDateFormat ("yyyy-MM-dd");
try

java.util.Date date = sdf1.parse ("14-11-22");
String d = sdf2.format (date);
System.out.println (d);

catch (ParseException e)

e.printStackTrace();

追问

我这个2014-11-22是在excel里取的,我想在excel内变化输出就跟着变化,比如我在excel里输入2015-11-22 java执行时就跟着一样输出2015-11-22 你这个只能用这一个日期 啊

追答

传参数啊

追问

我不想在代码里改改动这快我就想在excel内改,不动代码以后执行就行了,!

java读取excel时间格式出现数字怎么处理

在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171。如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理。

正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话,创建一个日期格式,再将单元格的内容以这个日期格式显示出来。如果单元格不是日期格式,那么则直接得到NUMERIC的值就行了。

具体代码如下:

主要是判断NUMERIC 的时候 同事判断下 单元格是不是日期格式 如果是 日期格式直接 转成日期格式字符串返回值就ok了。

if (0 == cell.getCellType())     //判断是否为日期类型   if(HSSFDateUtil.isCellDateFormatted(cell))   //用于转化为日期格式  Date d = cell.getDateCellValue();   DateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");   str[k] = formater.format(d);  else   // 用于格式化数字,只保留数字的整数部分   DecimalFormat df = new DecimalFormat("########");   str[k] = df.format(cell.getNumericCellValue());  

JSch连接SSH问题Exception:Algorithm negotiation fail

使用Jenkins配置完远程SSH服务器,发生无法连接问题,查看Log后找到:

[SSH] Exception:Algorithm negotiation fail
com.jcraft.jsch.JSchException: Algorithm negotiation fail
at com.jcraft.jsch.Session.receive_kexinit(Session.java:520)
at com.jcraft.jsch.Session.connect(Session.java:286)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.jvnet.hudson.plugins.SSHSite.createSession(SSHSite.java:141)
at org.jvnet.hudson.plugins.SSHSite.executeCommand(SSHSite.java:151)
at org.jvnet.hudson.plugins.SSHBuildWrapper.executePreBuildScript(SSHBuildWrapper.java:75)
at org.jvnet.hudson.plugins.SSHBuildWrapper.setUp(SSHBuildWrapper.java:59)
at hudson.model.Build$BuildExecution.doRun(Build.java:154)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:533)
at hudson.model.Run.execute(Run.java:1754)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:89)
at hudson.model.Executor.run(Executor.java:240)
Finished: FAILURE

原因分析:OpenSSH和 JSch支持的交换算法不同,需要一方打开另一方支持的交换算法。

OpenSSH enables only the following key exchange algorithms by default:
- curve25519-sha256@libssh.org
- ecdh-sha2-nistp256
- ecdh-sha2-nistp384
- ecdh-sha2-nistp521
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group14-sha1

Where as JSch claims to support these algorithms for key exchange:
- diffie-hellman-group-exchange-sha1
- diffie-hellman-group1-sha1

解决办法:

在SSH的配置文件/etc/ssh/sshd_config增加以下两行,让SSH支持相应的算法和MACs。

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group1-sha1

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-ripemd160-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160,umac-128@openssh.com,hmac-md5,hmac-sha1,hmac-sha1-96,hmac-md5-96

完成后重启SSH即可解决问题。

参考技术A

正确的处理方法是先判断单元格的类型是否则NUMERIC类型,判断单元格是否为日期格式,如果是的话,创建一个日期格式,将单元格的内容以这个日期格式显示出来。如果单元格不是日期格式,那么则直接得到NUMERIC的值就行了。

在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171。如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理。

三维引用样式

如果要分析同一工作簿中多张工作表上的相同单元格或单元格区域中的数据,就要用到三维引用。三维引用包含单元格或区域引用,前面加上工作表名称的范围。Excel 使用存储在引用开始名和结束名之间的任何工作表。例如,=SUM(Sheet2:Sheet13!B5) 将计算包含在 B5 单元格内所有值的和,单元格取值范围是从工作表2 到工作表 13。

以上内容参考:百度百科-单元格

参考技术B java读取excel时间格式出现数字的处理方法:
Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化
1、数值格式(CELL_TYPE_NUMERIC):
1.纯数值格式:getNumericCellValue() 直接获取数据
2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式
1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)
2).判断是日期或者时间
cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")
OR: cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")
3.自定义日期格式:处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式
判断cell.getCellStyle().getDataFormat()值,解析数值格式
yyyy年m月d日----->31
m月d日---->58
h时mm分--->32
举例说明:
private String parseExcel(Cell cell)
String result = new String();
switch (cell.getCellType())
case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
if (HSSFDateUtil.isCellDateFormatted(cell)) // 处理日期格式、时间格式
SimpleDateFormat sdf = null;
if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
.getBuiltinFormat("h:mm"))
sdf = new SimpleDateFormat("HH:mm");
else // 日期
sdf = new SimpleDateFormat("yyyy-MM-dd");

Date date = cell.getDateCellValue();
result = sdf.format(date);
else if (cell.getCellStyle().getDataFormat() == 58)
// 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
double value = cell.getNumericCellValue();
Date date = org.apache.poi.ss.usermodel.DateUtil
.getJavaDate(value);
result = sdf.format(date);
else
double value = cell.getNumericCellValue();
CellStyle style = cell.getCellStyle();
DecimalFormat format = new DecimalFormat();
String temp = style.getDataFormatString();
// 单元格设置成常规
if (temp.equals("General"))
format.applyPattern("#");

result = format.format(value);

break;
case HSSFCell.CELL_TYPE_STRING:// String类型
result = cell.getRichStringCellValue().toString();
break;
case HSSFCell.CELL_TYPE_BLANK:
result = "";
default:
result = "";
break;

return result;
参考技术C 那就全部按照字符串读取,然后用Integer.parseInt()方法和new SimpleDateFormat().format()方法操作获得的字符串,没报异常就是对应的数字或时间,全报异常就是字符串本回答被提问者采纳 参考技术D 那就全部按照字符串读取,然后用Integer.parseInt()方法和new SimpleDateFormat().format()方法操作获得的字符串,没报异常就是对应的数字或时间,全报异常就是字符串

以上是关于java读取exls日期 在excel内日期是“2014-11-22”但java输出“14-11-22”的主要内容,如果未能解决你的问题,请参考以下文章

java读取excel时间格式出现数字怎么处理

为啥java用jxl读取excel日期后显示出来的是一些数字呢,我的excel里面的日期格式为2010年5月2日这种

java读取excel文件,怎么取日期列?

java poi读取excel日期格式数据

java读取excel文件,按照指定的日期条件读数据,然后导出txt存储并以其日期命令

POI读取excel日期的问题