我正在使用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));
}
}
Run Code Online (Sandbox Code Playgroud)
为了完整起见,我将解决方案添加为答案......(即我仍然认为我很年轻,需要投票...)
从POI 3.13开始,我们添加了一个org.apache.poi.util.LocaleUtil类,用于处理POI中的Locale特定请求.有一种setUserTimeZone()方法可以解决您的问题.这需要根据线程设置 - 因此在打开或创建工作簿之前,请使用您的TimeZone对象调用该函数.通常在处理结束时清除ThreadLocals是个好主意,特别是如果你处理线程池,所以请resetUserTimeZone()在一个finally块中调用.
虽然我们已经注意防止通过Forbidden Apis工具对TimeZone/Locale相关调用进行未被注意/默认处理- 我不打赌,我们已经涵盖了所有情况.如果您发现任何违规行为,请打开机票.
| 归档时间: |
|
| 查看次数: |
1457 次 |
| 最近记录: |