我不确定这个月是否总是两位数:
java.time.LocalDateTime ldt = java.time.LocalDateTime.now( java.time.ZoneId.of( "America/New_York" ));
String path = "my/path/" + ldt.getYear().toString() + "/" + ldt.getMonthValue().toString() + "/" + ldt.getDayOfMonth().toString() + "/" + ldt.getHour().toString() + "/";
现在是这样,因为我们的月份是两位数。例如,如何检查它在7月份是否有效?
无法使用“%02d”格式。
抱歉,刚到 java 。
1条答案
按热度按时间blpfk2vs1#
热释光;博士
正在切换您的请求以使用标准iso 8601格式…
运行时:
my/path/2020-11-17t21
日期时间格式
让
java.time.format.DateTimeFormatter
全班做你的格式化工作。你不需要操纵绳子。双重性格,如
dd
而不是d
在需要的地方强制一个前导零。仔细阅读javadoc类以理解格式化代码。iso 8601标准
斜杠字符(solidus)可以解释为一个文件夹/目录。所以我建议你坚持标准化的ISO8601格式。标准格式保持年-月-日-小时顺序,但使用连字符作为分隔符。和一个
T
将一天中的时间与日期部分分开。默认情况下,java.time类使用iso8601格式。所以不需要指定任何格式模式。
当你在做的时候,我也会用分钟,所以日期和时间很容易辨认。如果你一直想要一个零分钟,就把时间缩短到小时。
最后一个问题:在一些流行的文件系统中,冒号字符也可以解释为文件夹/目录。所以我们应该避免在小时和分钟之间使用冒号字符。在兄弟网站上看到这个问题http://www.askdifferent.com/ 关于这方面的策略。
或者你只想坚持一个小时而不是一分钟。
综合起来:
请在ideone.com上查看此代码的实时运行。
输出→ my/path/2020-11-17t21
localdatetime不是一个时刻
顺便问一下,你明白吗
LocalDateTime
不代表一刻?它故意缺乏时区或utc偏移量的概念。该类型表示一个日期,例如2021年1月23日,以及一天中的某个时间,例如中午,但我们不知道这是指东京的23日中午、巴黎的23日中午还是蒙特勒的23日中午é艾尔,三个完全不同的时刻相隔几个小时。所以你的密码java.time.LocalDateTime.now( java.time.ZoneId.of( "America/New_York" ))
可能达不到你的期望。要捕捉瞬间,请使用
Instant
(始终以utc为单位),OffsetDateTime
,或ZonedDateTime
.