- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我必须使用以下格式解析日期:“201710”,其中 10 - 一年中的第几周。我试图以这种方式实现它:
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyw");
java.time.LocalDate startDate = java.time.LocalDate.parse("201710", formatter);
System.out.println(startDate);
但它抛出异常:
java.time.format.DateTimeParseException: Text '201710' could not be parsed at index 0
然后我需要从 LocalDate 对象获取一周的第一天和最后一天。例如“201710”- 05.03 12.03(一周的第一天必须是星期日)。
最佳答案
@Kayaman 接受的答案是不正确的,因为您不能混合使用标准日期表示(使用 yyyy = 年份)和星期日期表示(使用 ww = 基于星期的年份)。 标准日历年和基于星期的年份之间的细微差别与日历年的开始或结束有关。结论:不要使用符号“y”,而是使用符号“Y” .输入“201501”的反例:
正确的解决方案
DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.appendValue(WeekFields.ISO.weekBasedYear(), 4)
.appendValue(WeekFields.ISO.weekOfWeekBasedYear(), 2)
.parseDefaulting(ChronoField.DAY_OF_WEEK, 1)
.toFormatter();
LocalDate startDate = LocalDate.parse("201501", formatter);
System.out.println(startDate); // 2014-12-29
基于@Kayaman的提议:
DateTimeFormatter dtf =
new DateTimeFormatterBuilder()
.appendValue(ChronoField.YEAR, 4)
.appendValue(ChronoField.ALIGNED_WEEK_OF_YEAR, 2)
.parseDefaulting(WeekFields.ISO.dayOfWeek(), 1)
.toFormatter();
System.out.println(LocalDate.parse("201501", dtf)); // 2015-01-05 (wrong)
结果日期不同!差异是由日历年的定义引起的,日历年总是从一月一日开始,而基于周的年份总是从星期一开始(ISO-8601 定义),使用日历年的第一周至少有 4 天。
附加说明 a):Java-8 不管理可本地化字段的相邻数字解析,例如基于周的字段(另请参阅相关的 JDK issue ),因此我选择了基于构建器的解决方案而不是定义模式“YYYYww”(然而,Java-9 promise 提供解决方案)。但即使使用 Java-9,基于构建的方法仍然是必要的,因为需要为缺少的星期几定义默认值(此处:设置为星期一)。
附加说明 b): 如果您正在寻找基于周的年份和年份的组合的真实类型,并且使用 LocalDate
作为这种缺失类型的解决方法,您可以在 Threeten-Extra 或我的库 Time4J 中的第 3 方库中找到这种类型。示例:
ChronoFormatter<CalendarWeek> cf =
ChronoFormatter.ofPattern(
"YYYYww",
PatternType.CLDR,
Locale.ROOT,
CalendarWeek.chronology()
);
CalendarWeek cw = cf.parse("201501");
System.out.println(cw); // 2015-W01
System.out.println(cw.at(Weekday.MONDAY)); // 2014-12-29
关于java - LocalDate 无法用 'ww' 解析 'yyyy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42978325/
有人可以解释为什么得到这个日期的星期返回 1 而不是 53 吗?我如何让 Coldfusion 在此日期返回 53? Date1 = "{ts '2019-12-30 12:00:00'}
谁能解释为什么我在尝试解析日期时会得到这些值?我尝试了三种不同的输入,如下所示: 1) 2013 年第三周 Date date = new SimpleDateFormat("ww.yyyy").pa
我尝试将以下[有效]正则表达式放入 VBA 应用程序中: (?(\d{2}){0,2}[-\/]?)(?(\d{2})) 我不断收到错误 5017。对象“IRegExp2”不支持方法“执行”。 但是如
我在一些 Excel 表中表示了一些 WW 对象,我需要创建一个 Wonderware 接受的 CSV 文件。也就是说,我需要这里显示的“WW 格式”。 我正在使用 VSTO 插件,一切都应该在 C#
我必须使用以下格式解析日期:“201710”,其中 10 - 一年中的第几周。我试图以这种方式实现它: DateTimeFormatter formatter = DateTimeFormatter.
我想要 Bigquery 中的两位数 ISO 周格式 (ww) "select week(date)..." //statement results in a one digit week forma
尝试将格式为 YYYY-WW 的日期解析为 Timestamp 但这只会产生年份的开始日期,如下所示: In [11]: pd.to_datetime('2015-09', format='%Y-%W
我终于问了我的第一个问题(虽然我是一个长期跟踪者)。 前几天在工作中,一个 SQL 查询引起了我的注意。问题在于 WHERE 的性能子句,当使用 IN 将索引与可能的值进行比较时运算符(operato
W 属于 {a,b}* 的 WW 是上下文无关语言吗? 如果是,请提供PDA。 最佳答案 不它不是 假设,为了自相矛盾,它是,然后有一个 PDA 接受它。 根据抽水引理(对于 CFG),有一个长度 p
我正在尝试将 site.com w.site.com ww.site.com 和 wwww.site.com 重定向到 www.site.com。 我的老板希望确保网站上也出现拼写错误。 他们重定向得
是否有一个 mysql 日期函数可以根据下表提供基于一年中 53 周的 yyyy-mm-ww 日期?例如,2015-01-01 是 (2015-jan-week01)。或者,您是否有推荐的方法可以让我
我正在尝试使用 strftime 转换 {YYYY}W{WW} 字符串,解释为 this answer . 但是它总是给出 W-1 : echo $date = utf8_encode(strftim
我有一个查询,我使用 DatePart(ww , [TimeEntryDate]) 作为列按周分组,它返回周数。我想显示一周的结束日期,并希望它始终是星期六。 这是完整的查询 SELECT DateP
我有一个包含两列的数据框; 销售额 和日期。 dataset.head(10) Date Sales 0 2015-01-02 34988.0 1 2015-01-03
这个问题在这里已经有了答案: Python: how to count overlapping occurrences of a substring [duplicate] (4 个回答) 关闭6年前
System.out.println( DateTimeFormatter.ofPattern("YYYY-ww").withZone(ZoneOffset.UTC).format(Insta
我有个约会:9/21/2015 .我想将此日期转换为格式 39/2015 .如果日期在 A2 中,我可以使用 CONCATENATE(WEEKNUM(A2), "/", TEXT(A2, "yyyy"
我正在尝试将查询从 MySQL 转换为 PostgreSQL。结果略有不同,因为这两种语言如何定义一年中的一周以及包括哪些日子似乎存在差异。 相同的逻辑给出不同的日期结果: PostgreSQL 语法
我遇到了 apache 配置问题(linux 发行版)。我想重定向键入的 URL(在浏览器中): domain.com www.domain.com http://domain.com http://
我正在尝试将 yyyy-mm-dd 转换为 yyyy-ww。 以下数据框是如何实现的: dates = {'date': ['2015-02-04','2016-03-05']} df = pd.Da
我是一名优秀的程序员,十分优秀!