找回密码
 立即注册

QQ登录

只需一步,快速开始

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证

超级版主

200

主题

9899

帖子

1万

积分

超级版主

Rank: 8Rank: 8

积分
15533

讲师达人悬赏达人微信认证勋章SpreadJS 认证SpreadJS 高级认证元老葡萄

Clark.Pan 讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-2-1 11:49  /   查看:2048  /  回复:0
上一期我们已经介绍了GcExcel如何设置日期,那就是直接设置一个Date类型的日期,如果是日期类型的字符串需要转换成对应的Date对象才行。
本期我们介绍一个GcExcel自带的自动转换方法setAutoParse。这个设置之后可以开启自动转换的功能,这样一些的日期的字符串就可以支持直接设置。
而setAutoParse本身有一个需要注意的点,在一些比较特殊的日期格式时,自动转换的日期类别跟Culture的设置有关。举个例子
12/31/2030这个日期格式,在中文的Culture下就无法被自动转换。输出结果没有改变
  1. Workbook workbook = new Workbook();
  2.         workbook.setCulture(Locale.CHINESE);
  3.         IWorksheet worksheet = workbook.getActiveSheet();
  4.         workbook.setAutoParse(true);
  5.         String dateStr = "12/31/2030";
  6.         worksheet.getRange("A1").setValue(dateStr);
  7.         worksheet.getRange("A1").setNumberFormat("yyyy-mm-dd");
  8.         System.out.println("text:"+worksheet.getRange("A1").getText());
  9.         System.out.println("formatter:"+worksheet.getRange("A1").getNumberFormat());
复制代码
image.png495906066.png
当我们切换Culture为English时,结果变为正常
  1. Workbook workbook = new Workbook();
  2.         workbook.setCulture(Locale.ENGLISH);
  3.         IWorksheet worksheet = workbook.getActiveSheet();
  4.         workbook.setAutoParse(true);
  5.         String dateStr = "12/31/2030";
  6.         worksheet.getRange("A1").setValue(dateStr);
  7.         worksheet.getRange("A1").setNumberFormat("yyyy-mm-dd");
  8.         System.out.println("text:"+worksheet.getRange("A1").getText());
  9.         System.out.println("formatter:"+worksheet.getRange("A1").getNumberFormat());
复制代码
image.png43445128.png
同理,像2030年12月30日这样的日期字符串,在中文状态下可以自动转换
  1. Workbook workbook = new Workbook();
  2.         workbook.setCulture(Locale.CHINESE);
  3.         IWorksheet worksheet = workbook.getActiveSheet();
  4.         workbook.setAutoParse(true);
  5.         String dateStr = "2030年12月30日";
  6.         worksheet.getRange("A1").setValue(dateStr);
  7.         worksheet.getRange("A1").setNumberFormat("yyyy-mm-dd");
  8.         System.out.println("text:"+worksheet.getRange("A1").getText());
  9.         System.out.println("formatter:"+worksheet.getRange("A1").getNumberFormat());
复制代码
image.png159672240.png
如上图所示2030年12月30日转换成了2030-12-30
但是当Culture为English时,结果却不能转换
  1. Workbook workbook = new Workbook();
  2.         workbook.setCulture(Locale.ENGLISH);
  3.         IWorksheet worksheet = workbook.getActiveSheet();
  4.         workbook.setAutoParse(true);
  5.         String dateStr = "2030年12月30日";
  6.         worksheet.getRange("A1").setValue(dateStr);
  7.         worksheet.getRange("A1").setNumberFormat("yyyy-mm-dd");
  8.         System.out.println("text:"+worksheet.getRange("A1").getText());
  9.         System.out.println("formatter:"+worksheet.getRange("A1").getNumberFormat());
复制代码
image.png259826354.png
如上图所示2030年12月30日转换没有被转换成2030-12-30

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部