我的日期格式为:YYYY-MM-DD
所需的输出格式是:"yyyy-MM-dd'T'HH: mm: ss.SSS'Z'"
我想在美国/芝加哥时区获得ISO格式的日期,作为一天的开始时间(从上午12:00开始)和一天的结束时间(结束于晚上11:59)。
对于eg.日期: 2020-06-08(6月8日)转换后的最终输出如下:
当天开始时间为日期: 2020-06-08T05:00:00.000Z
截止日期当日的结束时间:2020-06-09T04:59:59.999Z
如果有人对此有任何线索,请帮助我。
答:http://m.uploadedit.com/bltc/1591511729781.txt
更新:
ZoneId zoneId = ZoneId.of("America/Chicago");
LocalDate localDate = LocalDate.parse("2020-06-08");
DateTimeFormatter newPattern = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").withZone(zoneId);
Instant startOfDay = localDate.atStartOfDay(zoneId).toInstant();
Instant endOfDay = LocalDateTime.of(localDate, LocalTime.MAX).atZone(zoneId).toInstant().truncatedTo(ChronoUnit.MILLIS);
System.out.println(startOfDay);
System.out.println(endOfDay);
根据我所经历的,分数000不会出现在这里,但是可以肯定的是,如果没有分数毫秒,那么它就是000。在格式化时,我不知道如何将其显示出来。如果您找到了某个内容,请添加其他内容,您可以通过将startDate转换为字符串,然后将000追加到该内容来完成此操作。
结果
2020-06-08T05:00:00Z
2020-06-09T04:59:59.999Z
我建议使用java.time,现代Java日期和时间API,用于这样的日期和时间数学。
ZoneId zone = ZoneId.of("America/Chicago");
String dateString = "2020-06-08";
LocalDate date = LocalDate.parse(dateString);
Instant startOfDay = date.atStartOfDay(zone).toInstant();
Instant endOfDay = date.plusDays(1).atStartOfDay(zone).toInstant();
System.out.println("The day is from " + startOfDay + " (inclusive) to " + endOfDay + " (exclusive)");
输出为:
日期为2020-06-08T05:00:00Z(含)至2020-06-09T05:00:00Z(不含)
为了不排除一天中的最后一毫秒,我们需要将一天计算为持续到第二天的第一刻。如果你坚持要减去一毫秒或一纳秒,当然,这取决于你自己。例如:
Instant endOfDay = date.plusDays(1).atStartOfDay(zone).minusNanos(1).toInstant();
当天从2020-06-08T05:00:00Z(含)到2020-06-09T04:59:59.999999999Z(含1纳米以上)
编辑:如何在输出中打印毫秒?你很可能不需要这个。您要求的格式是国际标准ISO 8601(见底部的链接)。在ISO 8601中,秒的分数是可选的,省略它意味着0。因此,任何需要ISO8601的API都应该接受上述要求。如果不是,正确的解决方案是使用格式化程序。在这种情况下,我们需要将时间显式转换为UTC:
ZoneId zone = ZoneId.of("America/Chicago");
DateTimeFormatter formatterWithMillis = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSX");
String dateString = "2020-06-08";
LocalDate date = LocalDate.parse(dateString);
OffsetDateTime startOfDay = date.atStartOfDay(zone)
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC);
OffsetDateTime endOfDay = date.plusDays(1)
.atStartOfDay(zone)
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC);
String startString = startOfDay.format(formatterWithMillis);
String endString = endOfDay.format(formatterWithMillis);
System.out.println("The day is from " + startString + " (inclusive) to " + endString + " (exclusive)");
日期为2020-06-08T05:00:00.000Z(含)至2020-06-09T05:00:00.000Z(不含)
或在结束时间减去纳秒后,如前所述:
OffsetDateTime endOfDay = date.plusDays(1)
.atStartOfDay(zone)
.minusNanos(1)
.toOffsetDateTime()
.withOffsetSameInstant(ZoneOffset.UTC);
这一天是从2020-06-08T05:00:00.000Z(包括)到2020-06-09T04:59:59.999Z(包括和1纳米以上)
(由于时间被截断为整毫秒,1nano更多
没有真正意义,但我认为这不是重点。)
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6。
但是除了切换到ThreeTenBP库,我们没有其他选择吗?
如果您坚持,我想可以找到一种使用日历
、日期
和简单格式
的方法。这些类设计得很糟糕,而且很早就过时了,所以根据我所知道和不知道的,我更喜欢ThreeTenABP。
java.time
。 java.time
到Java6和7的Backport(用于JSR-310的Threeten)。 我有一个enum,其值如下:,,等。 我试图编写一个方法,它接受并返回该时间段的开始和结束日期。 我研究了新的Java8类,该类可能需要一个开始时间和结束时间,但似乎没有任何干净的方法可以在之后检索这些值。 如果不使用(似乎是错误的数据结构)或一些难看的日期时间算法,我如何能一次干净地返回开始日期和结束日期?
我想从JavaGUI到数据库获取startTime和endTime的值。 电脑座位班 Cobadatabase类 这里的问题是,当单击登录按钮时,开始时间显示在我的数据库中的开始时间和结束时间列上。当单击注销按钮时,将在数据库中创建另一个行,该行在starTime和endTime列上都包含endTime。我想知道为什么会这样...
问题内容: 我想知道如何计算本周的开始和结束日期?我发现这不是在标准android库或date4j之类的库中实现的。 是否有一些简单明了的实现方法?还是我必须再次骑自行车? 谢谢。 问题答案: 也许MonthDisplayHelper可能对您有所帮助。 祝好运!
问题内容: 我想为FIFA2014世界杯比赛创建一个警报应用程序,在该应用程序中我有一个服务器,用于在巴西/英亩存储比赛的日期和时间,并且我的客户端是android应用程序,而android设备可能具有任何可能的时区所以我的问题是我想将巴西/英亩的时间转换为具有不同时区的本地android设备的时间,经过大量的谷歌搜索后,我开始了解joda数据和时间库,但是在android中它太慢了,所以请提出任
我正在尝试获取PST时区中一天的开始时间(00:00:00)和结束时间(23:59:59)。我尝试了以下代码,但由于某种原因,我只获取UTC中的开始和结束时间。我尝试将时区更改为包括“美国/Los_angeles”,但输出时间戳始终显示GMT/UTC的开始和结束时间。 我的代码: 输出: 我这里有什么遗漏吗?我应该更新任何包吗。?
给定ZonedDateTime,我如何获得时区所在的一天开始的ZonedDateTime?我不希望一天的开始是UTC。 实例 给定ZoneDateTime。of(2022,6,8,1,0,0,0,ZoneId.of(“美国/纽约”)) 我想返回ZonedDateTime.of(2022, 6, 7, 0, 0, 0, 0, ZoneId.of("America/New_York")) 因为UTC的