- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
有谁知道 Java 中的 DateFormatter 不是那么挑剔?我的意思是我可以为它提供多种格式的日期,如果我提供它这样的格式:
yyyy-MM-dd HH:mm:ss Z
用户可以输入:
2010-11-02 10:46:05 -0600
or
2010-11-02 10:46:05
or
2010-11-02 10:46
or
2010-11-02
or
2010-11-02 -0600
我可以创建一个配置有 DateFormat 对象列表的 DataFormat 实现,并使我的实现遍历列表中的每个对象,直到有人能够解析日期。所以,如果有人知道现有的日期格式化库比 Java 提供的更不挑剔/更灵活,我真的很好奇。
最佳答案
看起来每个部分都有一个非常规则的格式,只是这些部分是可选的。我会使用一个包含每个部分的正则表达式(有些是可选的)。匹配该正则表达式并获取每个部分的组。然后将它们以最完整的形式(“2010-11-02 10:46:05 -0600”)放在一起,并让 DateFormatter 对其进行解析。这样您还可以控制部件的默认值(如果它们丢失了)。
这是一些代码:
Pattern p = Pattern
.compile("(\\d{4}-\\d{2}-\\d{2})\\s*(\\d{2}:\\d{2})?(:\\d{2})?\\s*(\\+|-\\d{4})?");
String[] strs = { "2010-11-02 10:46:05 -0600", "2010-11-02 10:46:05",
"2010-11-02 10:46", "2010-11-02", "2010-11-02 -0600" };
SimpleDateFormat format = new SimpleDateFormat("yyy-MM-dd HH:mm:ss Z");
for (String s : strs) {
Matcher m = p.matcher(s);
if (m.matches()) {
String hrmin = m.group(2) == null ? "00:00" : m.group(2);
String sec = m.group(3) == null ? ":00" : m.group(3);
String z = m.group(4) == null ? "+0000" : m.group(4);
String t = String.format("%s %s%s %s", m.group(1), hrmin, sec,
z);
System.out.println(s + " : " + format.parse(t));
}
}
输出:
2010-11-02 10:46:05 -0600 : Tue Nov 02 11:46:05 CDT 2010
2010-11-02 10:46:05 : Tue Nov 02 05:46:05 CDT 2010
2010-11-02 10:46 : Tue Nov 02 05:46:00 CDT 2010
2010-11-02 : Mon Nov 01 19:00:00 CDT 2010
2010-11-02 -0600 : Tue Nov 02 01:00:00 CDT 2010
关于java - DateFormatter 那个不挑剔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4079462/
我的日期时间格式字符串是:yyyy-MM-dd'T'HH:mm:ss.SSSZ 我正在使用 Joda Time 中的 DateTimeFormatter 以上述格式打印我的日期。 现在,将日期视为 2
这个问题已经有答案了: Getting date from [NSDate date] off by a few hours (3 个回答) 已关闭 5 年前。 我对 Date 进行了扩展,返回格式化
先决条件 在手机设置中设置时区 GMT+13(法莱、托克劳)。 实现 extension Date { func formatForDto() -> String { let
我经常在代码中使用 DateFormatter 并且没有发现任何问题,但后来我决定测试一个类进行大量迭代 - 我注意到一个巨大的内存泄漏。 泄漏的原因是 DateFormatter。 简单代码: va
这个问题已经有答案了: want current date and time in "dd/MM/yyyy HH:mm:ss.SS" format (11 个回答) Change the format
我正在尝试将不带时区值(例如“31.05.2015”)的字符串转换为 NSDate。 我的 DateFormatter 有什么问题?它返回日期 2015-05-31 22:00:00 +0000当我尝
这个问题已经有答案了: NSDateFormatter show wrong year (1 个回答) 已关闭 3 年前。 我尝试格式化我的 UTC 日期,但结果似乎非常错误 日期格式化程序:
这个问题在这里已经有了答案: NSDate Format outputting wrong date (5 个答案) Getting date from [NSDate date] off by
我一直在使用以下代码来格式化日期值: NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setLoca
这个问题在这里已经有了答案: Getting date from [NSDate date] off by a few hours (3 个答案) 关闭 5 年前。 我对返回格式化字符串的 Date
我从字符串中得出的日期总是 nil,我不知道为什么。 func getBirthdate() -> Date? { let formatter = DateFormatter()
我是 iOS 的新手,我想在我的约会中增加几毫秒,比如 (5)。我使用了下面的代码,但我没有得到我正在使用的确切日期 let str_TimeStamp = "2017-08-09 10:26:30.
我的 DateFormatter 有问题。 我的 iOS 应用程序与服务器通信并使用 If-Modified-Since header 和使用以下格式化程序创建的日期: modifiedSinceDa
首先要提前致谢。我已经使用 iOS/Swift 多年,这是我第一次看到这种奇怪的行为。这是代码: let dateFormatter = DateFormatter() dateFormatter.d
这个问题在这里已经有了答案: NSDateFormatter show wrong year (1 个回答) 关闭 6 年前。 我有以下代码: var components = DateCompon
在我的 Java 应用程序中,我使用 DateFormat 实例来解析日期输入。 DateFormat fmt; fmt = DateFormat.getDateInstance(DateFormat
代码: let isoDate = "1981-02-20T10:44:00+0800" let dateFormatter = DateFormatter() dateFormatter.timeZ
有谁知道 Java 中的 DateFormatter 不是那么挑剔?我的意思是我可以为它提供多种格式的日期,如果我提供它这样的格式: yyyy-MM-dd HH:mm:ss Z 用户可以输入: 201
我已经阅读了多篇关于此的文章,其中大部分是由于未设置特定时区而系统获取了当前时区。我的场景略有不同并给出了意想不到的结果,所以我会尝试详细解释。 我正在处理一个返回日期的后端,该日期分为日期和时间,存
我试图以我设备的语言显示格式化日期,但它一直以英语显示(即使设备设置为葡萄牙语)。 在我的 ViewController 中我创建了一个日期: let todaysDate: Date = Date(
我是一名优秀的程序员,十分优秀!