gpt4 book ai didi

java - 当月份从零开始时,Excel 将数字格式更改为日期。这是一个奇怪的错误吗?

转载 作者:行者123 更新时间:2023-11-30 08:25:27 26 4
gpt4 key购买 nike

我有一个格式为 04/08/2014(dd/mm/yyy) 的日期。我复制了字符串并将其放在 excel 中,它变成了 04-08-2014。对于“mm”不以 0 开头的其他日期,例如,如果我复制 12/11/2013 并将其放在 excel 中,它通常会粘贴为 12/13/2014。

实际上我正在尝试用 java 生成一个 excel 代码附在下面

public void exportExcel(){      
FacesContext fc = FacesContext.getCurrentInstance();
ExternalContext ec = fc.getExternalContext();
String filename = "ExcelList.csv";

try{

ec.responseReset();
ec.setResponseContentType("text/csv");
ec.setResponseHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"");
Writer writer = ec.getResponseOutputWriter();



if(PageList != null && PageList.size() > 0){

writer.append(toCsvField("Name")).append(',')
.append(toCsvField("Code")).append(',')
.append(toCsvField("Description")).append(',')
.append('\n');

for (PageBean View : PageList) {
writer.append(toCsvField(View.Name)).append(',')
.append(toCsvField(View.Number)).append(',')
.append(toCsvField(View.Description)).append(',');

}
}

fc.responseComplete();

}catch(Exception e){

}

}

public static String toCsvField(Object value) {
if (value == null) {
return "";
}

String field = String.valueOf(value).replace("\"", "\"\"");

if (field.indexOf(',') > -1 || field.indexOf('"') > -1) {
field = '"' + field + '"';
}

return field;
}

月份字段有什么问题以 0 开头。请帮忙。

最佳答案

要遵循的步骤:

  • 获取设置为浏览器语言的客户端区域设置
  • 根据客户区域设置格式化数据
  • 在csv中写入格式化数据

注意:csv 文件必须在与下载它的系统相同的区域设置中打开。

如果 csv 是在 German locale(从浏览器读取)中下载的,并且您打算在 French locale(从系统区域和语言设置中读取)中打开它,那么它将使 excel 中的数据不匹配/损坏。

    import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.Locale;

// 04/08/2014(dd/mm/yyy)
Calendar cal = Calendar.getInstance();
cal.set(2014, 7, 4, 0, 0, 0);
double no = 123456.7890;
Date date = cal.getTime();
System.out.println(date);

for (Locale locale : Locale.getAvailableLocales()) {
NumberFormat numberFormat = DecimalFormat.getNumberInstance(locale);
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, locale);

System.out.println("========================================");
System.out.println(locale.getDisplayCountry() + " - " + locale.toString());
System.out.println(numberFormat.format(no));
System.out.println(dateFormat.format(date));
}

葡萄牙 的输出是 04-08-2014

  • 这意味着如果您的系统的区域和语言设置为葡萄牙并且您尝试粘贴04/08/2014(dd/mm/yyy)在 excel 中,它将自动转换为 04-08-2014

  • 在 csv 的第一行添加 sep=; 以便 excel 可以读取它以将列拆分为单元格,因为默认情况下使用逗号 (,) 作为分隔符但它会产生问题在少数使用逗号作为数字中的分组分隔符或小数点分隔符的区域设置中。

对于 葡萄牙 语言环境,您的 csv 将如下所示:

    sep=;
"Name";"Number";"DOB"
"A";"123.456,789";"04-08-2014"
"B";"123.456,789";"12-11-2013"

读取客户语言环境的链接:

关于java - 当月份从零开始时,Excel 将数字格式更改为日期。这是一个奇怪的错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22198278/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com