Optional parts in SimpleDateFormat(SimpleDateFormat 中的可选部分)
问题描述
我正在读取可能带有或不带有时区调整的日期字符串:yyyyMMddHHmmssz 或 yyyyMMddHHmmss.当字符串缺少区域时,我会将其视为 GMT.我没有看到在 SimpleDateFormat 中创建可选部分的任何方法,但也许我遗漏了一些东西.有没有办法用 SimpleDateFormat 来做到这一点,还是我应该写一个新的具体 DateFormat 来处理这个?
I'm reading in date strings that could be with or without a time zone adjustment: yyyyMMddHHmmssz or yyyyMMddHHmmss. When a string is missing a zone, I'll treat it as GMT. I'm not seeing any way to create optional sections in a SimpleDateFormat, but maybe I'm missing something. Is there a way to do this with a SimpleDateFormat, or should I just write a new concrete DateFormat to handle this?
推荐答案
我会创建两个 SimpleDateFormat,一个有时区,一个没有.您可以查看 String 的长度来确定使用哪一个.
I would create two SimpleDateFormat, one with a time zone and one without. You can look at the length of the String to determine which one to use.
听起来您需要一个代表两个不同 SDF 的 DateFormat.
Sounds like you need a DateFormat which delegates to two different SDF.
DateFormat df = new DateFormat() {
static final String FORMAT1 = "yyyyMMddHHmmss";
static final String FORMAT2 = "yyyyMMddHHmmssz";
final SimpleDateFormat sdf1 = new SimpleDateFormat(FORMAT1);
final SimpleDateFormat sdf2 = new SimpleDateFormat(FORMAT2);
@Override
public StringBuffer format(Date date, StringBuffer toAppendTo, FieldPosition fieldPosition) {
throw new UnsupportedOperationException();
}
@Override
public Date parse(String source, ParsePosition pos) {
if (source.length() - pos.getIndex() == FORMAT1.length())
return sdf1.parse(source, pos);
return sdf2.parse(source, pos);
}
};
System.out.println(df.parse("20110102030405"));
System.out.println(df.parse("20110102030405PST"));
这篇关于SimpleDateFormat 中的可选部分的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:SimpleDateFormat 中的可选部分
基础教程推荐
- JPA惰性列表上的流 2022-01-01
- Maven:无效的目标版本:10 2022-01-01
- 在java中使用xpath和selenium解析HTML表格数据 2022-01-01
- 如何在相机中应用自定义滤镜 [Surfaceview 预览]. 2022-01-01
- 在springboot中如何给mybatis加拦截器 2023-04-29
- doFilter()是在servlet的工作完成之前还是之后执行的? 2022-01-01
- 控制台应用程序中的 Java 键盘输入解析 2022-01-01
- 将 double 转换为 Int,向下舍入 2022-01-01
- Java ECDSAwithSHA256 签名长度不一致 2022-01-01
- 将 Windows 证书导入 Java 2022-01-01
