我想从特定时区的Java(也在UTC)获取UTC即时(因为我的数据库存储在UTC中),这是我迄今为止所尝试的:
public static Instant getStartOfTheDayDateTime(Instant instant, String zoneId) {
ZonedDateTime zoned = instant.atZone(ZONE_ID_TO_ZONE_MAP.get(zoneId));
ZoneId zone = ZoneId.of(zoneId);
return zoned.toLocalDate().atStartOfDay(zone).toInstant();
// ZonedDateTime startOfTheDay = zoned.withHour(0)
// .withMinute(0)
// .withSecond(0)
// .withNano(0);
//
// return startOfTheDay.toInstant();
}
public static Instant getEndOfTheDayDateTime(Instant instant, String zoneId) {
ZonedDateTime zoned = instant.atZone(ZONE_ID_TO_ZONE_MAP.get(zoneId));
ZonedDateTime endOfTheDay = zoned.withHour(0)
.withMinute(0)
.withSecond(0)
.withNano(0)
.plusDays(1);
return endOfTheDay.toInstant();
}
每次尝试都表明:
2020-04-10 22:00:00.0(Timestamp), 2020-04-11 22:00:00.0(Timestamp)
这是欧洲/巴黎地区的世界协调时开始/结束时间吗?
开始新的一天。
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdtStartOfDay = instant.atZone( z ).toLocalDate().atStartOfDay( z ) ;
询问该时刻是否在该区域的DST中。
ZoneRules rules = z.getRules();
boolean isDst = rules.isDaylightSavings( zdtStartOfDay.toInstant() );
公共静态即时GetStartoftheDaydate时间(Instant Instant,String zoneId)
我建议您让调用的程序员传递一个有效的ZoneId对象,而不仅仅是一个字符串。验证其字符串输入不应该是该方法的工作。如果可以合理预期即时,那么也可以合理预期区域ID。
public static Instant getStartOfTheDayDateTime(Instant instant, ZoneID zoneId )
公共静态即时getEndOfTheDayDateTime(Instant Instant,String zoneId){
试图确定一天的最后一刻是不可能的,因为最后一秒是无限可分的。
此外,这种定义时间跨度的方法也很尴尬。这使得对接多个跨度变得棘手。各种软件系统和协议在最后分数秒的分辨率上有所不同,使用毫秒、微秒、纳秒或其他分数。
日期时间处理的常见做法是使用半开放方法跟踪时间跨度。在半开放式中,开始是包含的,而结束是独占的。
因此,一整天从一天的第一刻开始,一直持续到第二天的第一刻,但不包括第二天的第一刻。
ZoneId z = ZoneId.of( "Europe/Paris" );
ZonedDateTime zdtStartOfDay = instant.atZone( z ).toLocalDate().atStartOfDay( z ) ;
ZonedDateTime zdtStartOfNextDay = instant.atZone( z ).toLocalDate().plusDays( 1 ).atStartOfDay( z ) ;
您可能希望将代码分成更多行,以便于阅读/调试。
Instant instant = Instant.now() ; // Or passed in.
ZoneId z = ZoneId.of( "Europe/Paris" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;
LocalDate ld = zdt.toLocalDate() ;
LocalDate ldNextDay = ld.plusDays( 1 ) ;
ZonedDateTime zdtStartOfNextDay = ldNextDay.atStartOfDay( z ) ;
查看此代码在IdeOne上的实时运行。通用域名格式。例如:
System.out.println( instant ) ; // 2020-04-13T00:15:25.235341Z
System.out.println( zdt ) ; // 2020-04-13T02:15:25.235341+02:00[Europe/Paris]
System.out.println( ld ) ; // 2020-04-13
System.out.println( ldNextDay ) ; // 2020-04-14
System.out.println( zdtStartOfNextDay ) ; // 2020-04-14T00:00+02:00[Europe/Paris]
如果你经常在一段时间内做这类工作,那么我建议在你的项目中添加额外的310个库。该库包括区间类,用于将时间跨度作为一对即时对象进行跟踪。
Interval interval = Interval.of( zdtStartOfDay.toInstant() , zdtStartOfNextDay.toInstant() ) ;
然后,您可以使用几种方便的比较方法,例如
靠近
、包含
、包围
、交集
、重叠
和联合
。
切勿使用java。sql。时间戳类。这个类是Java最早版本附带的糟糕的日期时间类的一部分。这些类现在是遗留的,完全被现代java所取代。JSR 310中定义的时间类,内置于Java 8及更高版本中。
从JDBC 4.2开始,我们可以交换java。带有数据库的时间对象。使用getObject、setObject和updateObject。
JDBC规范奇怪地要求支持
OffsetDateTime
,但不支持更常用的Instant
和ZonedDateTime
。您的特定驱动程序可能支持这些其他类型。如果没有,请转换。
从数据库检索。
OffsetDateTime odt = myResultSet.getObject( … , OffsetDateTime.class ) ;
Instant instant = odt.toInstant() ;
发送到数据库。
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC ) ;
myPreparedStatement.setObject( … , odt ) ;
这是欧洲/巴黎地区的世界协调时开始/结束时间吗?
对欧洲/巴黎是夏令时。巴黎的午夜发生在UTC时间22:00。
我希望有2020-04-11 02:00:00.0(时间戳),2020-04-12 02:00:00.0(时间戳)
不对,世界协调时02:00是巴黎时间04:00。
现在,巴黎是夏季时间:世界协调时2。巴黎比世界协调时“领先”两个小时。
所以巴黎当地时间的00:00:00是UTC的22:00:00。
问题内容: 我正在使用JavaScript类,并尝试使用方法获取当前日期。但显然是加载系统日期和时间。我正在从印度运行代码,但我想使用相同的方法来获取英国的日期和时间。我怎样才能做到这一点? 问题答案: 如果您知道UTC偏移量,则可以使用以下函数传递它并获取时间:
> 在Google云控制台中创建新项目 在空云数据存储中创建一个新实体。当提示输入位置时,选择,根据Cloud Datastore位置表示欧洲的多个区域。 接下来,创建新的Google App Engine(standard env)应用程序并将其部署到同一个项目中。 Cloud Datastore Locations还解释说: Google Cloud Platform项目的位置设置同时适用于C
问题内容: 在一个新项目中,我正在以CSV格式导入到mysql表中的数据。列之一是价格字段,该字段以欧洲格式(即,欧元)存储货币。345,83。我遇到的问题是存储此十进制分隔符。在大多数欧洲货币中,十进制分隔符为“,”,但是当我尝试在字段中插入十进制数字(例如345,83)时,出现以下错误:“行’row#的列’column_name’的数据被截断了’”。如果我使用“。” 而不是“,”可以正常工作。
对于我们的俄罗斯租户,我们使用“欧洲/莫斯科”时区。但我们比正确的时间提前了一个小时。 欧洲/莫斯科是世界协调时3小时。但是,当我打印日期格式与欧洲/莫斯科时区得到1小时前的正确时间。 谢谢,西亚玛拉。
问题内容: 如何通过使用PHP中的strtotime()函数获取今天,昨天和前天的12点时间戳? 12点是一个变量,可由用户更改。 问题答案:
问题内容: 如何让今天的日期YYYYMMDD在火鸟,我一看下面的,但不能想出该怎么写。 问题答案: 我认为您可以: