gpt4 book ai didi

apache-poi - Apache Poi 默认时区

转载 作者:行者123 更新时间:2023-12-04 06:11:30 27 4
gpt4 key购买 nike

我正在使用 Apache POI 评估工作簿的每个公式单元格。当一个单元格包含对标准 excel 函数 NOW() 的调用时,Poi 会正确评估它并将调用替换为当前时间 - 格式为 VM 的默认时区。我想调整这个时区。有什么办法可以改变 DateUtil 的时区吗?

我在3.14-beta1中找到了NOW Implementation的代码,附上以供引用:

/**
* Implementation of Excel NOW() Function
*
* @author Frank Taffelt
*/
public final class Now extends Fixed0ArgFunction {
public ValueEval evaluate(int srcRowIndex, int srcColumnIndex) {
Date now = new Date(System.currentTimeMillis());
return new NumberEval(DateUtil.getExcelDate(now));
}
}

最佳答案

为了完整起见,我也将解决方案添加为答案......(即我仍然认为我还年轻,需要投票......)

POI 3.13 开头我们添加了一个 org.apache.poi.util.LocaleUtil类,处理 POI 中特定于区域设置的请求。有一个 setUserTimeZone() 方法可以处理您的问题。这需要为每个线程设置 - 因此在打开或创建工作簿之前,请使用您的 TimeZone 调用该函数目的。通常这是一个好主意clear ThreadLocals in the end of processing ,特别是如果你处理线程池,所以请在 finally block 中调用 resetUserTimeZone()

虽然我们已经注意防止通过 Forbidden Apis Tool 对 TimeZone/Locale 相关调用进行不被注意/默认处理- 我不敢打赌,我们已经涵盖了所有情况。如果您发现任何违规行为,请打开ticket .

关于apache-poi - Apache Poi 默认时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349406/

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