java - 用于管理 SimpleDateFormat 的 CodenameOne 实现的 X、XX、XXX(ISO 时区)格式案例的 Java 代码
问题描述
我使用 CodenameOne 跨平台工具创建了一个应用程序。它使用自己的 Java 类版本。在许多情况下,存在那些 CN1 类无法解决的边缘情况。目前尚不清楚它是多少。这是由于 API 版本问题或其他开发问题。
现在我必须使用 CN1 SimpleDateFormat 类。我检查了它,我不得不自己处理一些案件。
我用单引号和 u 参数管理文字,现在我必须处理时区
X, XX, XXX
参数。
我不知道是否应该处理其他情况。我的应用程序与 Android 或 Oracle 示例兼容,所以对我来说已经足够了,因为我至少可以重现示例案例。
X、XX、XXX 格式对应-08;-0800; -08:00
所以
我创建了这个代码,它依赖于 Z 时区参数,对应于 -0800
String format=completeFormatString;
Date date= new Date();
Calendar calendar = Calendar.getInstance(); //CN1 Calendar implementation
calendar.setTime(date);
String timeZoneFormat="Z";
SimpleDateFormat timeZoneDateFormat = new SimpleDateFormat(timeZoneFormat);
String timeZone=timeZoneDateFormat.format(calendar);
String timeZoneLastPart=timeZone.substring(timeZone.length()-2);
String timeZoneFirstPart=timeZone.substring(0,timeZone.length()-2);
format=StringUtil.replaceAll((format,"XXX",timeZoneFirstPart+":"+timeZoneLastPart);
format=StringUtil.replaceAll(format,"XX",timeZoneFirstPart+timeZoneLastPart);
format=StringUtil.replaceAll(format,"X",timeZoneFirstPart);
是否正确,将其放入我的应用程序是否安全?
解决方案
很遗憾你被这个臭名昭著的麻烦和长期过时的SimpleDateFormat
课程困住了。以下是它在 Oracle Java 11 中的行为示例。
for (String zid : new String[] { "Etc/UTC", "America/Inuvik", "Asia/Katmandu" }) {
System.out.format("%-14s", zid);
for (String formatPattern : new String[] { "Z", "X", "XX", "XXX" }) {
SimpleDateFormat sdf = new SimpleDateFormat(formatPattern);
sdf.setTimeZone(TimeZone.getTimeZone(ZoneId.of(zid)));
System.out.format(" %-6s", sdf.format(0L));
}
System.out.println();
}
输出是:
Etc/UTC +0000 Z Z Z America/Inuvik -0800 -08 -0800 -08:00 Asia/Katmandu +0530 +05 +0530 +05:30
似乎对于非零偏移量,它按照您在编写代码时所期望的方式工作。在我看来,您还需要+0000
从模式字母构建偏移零的特殊情况,Z
因为在这种情况下,模式字母大写X
会产生Z
(对于零或祖鲁时区),无论您使用X
,XX
还是XXX
.
推荐阅读
- sqlite - 是否有从 MYSQL 显示创建表的 SQLite 等价物?
- java - Android 设置具有唯一 ID 的闹钟
- python - If there is a way to pre-calculate SQL View in order to speed-up queries from it?
- activiti - 在部署时将 activiti 从 5.22.0 迁移到 6.0.0 会导致 IllegalThreadStateException
- python - 无法使用 readlines() 方法从文本文件中读取
- javascript - 如何让这个 React 方法返回语句/变量?
- mod-rewrite - Mod rewrite query parameter validation and blocking also request url blocking
- python - 如何在 django 上使用 curl 测试获取请求?
- c++ - 在头文件之外实现静态方法时未定义的引用
- c# - 通过反射在脚本组件中组装适用于随机情况