标签: zoneddatetime

如何将ZonedDateTime转换为日期?

我试图在我的数据库中设置服务器不可知日期时间,我相信这样做的最佳做法是设置UTC日期时间.我的数据库服务器是Cassandra,Java的db驱动程序只能理解Date类型.

所以假设在我的代码中我使用新的Java 8 ZonedDateTime来获取UTC now(ZonedDateTime.now(ZoneOffset.UTC)),我如何将这个ZonedDateTime实例转换为"遗留"Date类?

java java.util.date datetime-conversion java-8 zoneddatetime

83
推荐指数
4
解决办法
9万
查看次数

Java 8:如何从Epoch值创建ZonedDateTime?

Java 8 LocalDateTime有一种ofEpochSecond方法.不幸的是,没有这样的方法ZonedDateTime.现在,我有一个Epoch值和一个明确的ZoneId给定.我怎样才能获得ZonedDateTime这些?

java epoch java-8 zoneddatetime

51
推荐指数
1
解决办法
3万
查看次数

如何将ZonedDateTime格式化为String?

我想将a转换ZonedDateTime为a String格式("dd/MM/yyyy - hh:mm").我知道这在Joda-Time其他类型中是可能的,只是使用它们toString("dd/MM/yyyy - hh:mm")....但这不起作用ZonedDateTime.toString().

如何格式化ZonedDateTimeString


编辑:

我试图在另一个时区打印时间,结果似乎总是一样:

ZonedDateTime date = ZonedDateTime.now();
ZoneId la = ZoneId.of("America/Los_Angeles");
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la);

// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date));
// same result as the previous one
// 24/02/2017 - 04:53
System.out.println(DateTimeFormatter.ofPattern("dd/MM/yyyy - hh:mm").format(date2));
Run Code Online (Sandbox Code Playgroud)

而且我和洛杉矶不在同一时区.


编辑2:

找到了如何更改时区:

// Change this:
ZonedDateTime date2 = date.of(date.toLocalDateTime(), la); // incorrect!
// To this:
ZonedDateTime date2 = date.withZoneSameInstant(la);
Run Code Online (Sandbox Code Playgroud)

java string java-time zoneddatetime

38
推荐指数
1
解决办法
4万
查看次数

Jackson在Spring Boot中错误地序列化了ZonedDateTime

我有一个Spring Boot和Jetty的简单应用程序.我有一个简单的控制器返回一个具有Java 8的对象ZonedDateTime:

public class Device {
  // ...
  private ZonedDateTime lastUpdated;

  public Device(String id, ZonedDateTime lastUpdated, int course, double latitude, double longitude) {
    // ...
    this.lastUpdated = lastUpdated;
    // ...
  }

  public ZonedDateTime getLastUpdated() {
    return lastUpdated;
  }
}
Run Code Online (Sandbox Code Playgroud)

在我的RestController我只是有:

@RequestMapping("/devices/")
public @ResponseBody List<Device> index() {
  List<Device> devices = new ArrayList<>();
  devices.add(new Device("321421521", ZonedDateTime.now(), 0, 39.89011333, 24.438176666));

  return devices;
}
Run Code Online (Sandbox Code Playgroud)

我期望ZonedDateTime根据ISO格式进行格式化,但是我得到了类的整个JSON转储:

"lastUpdated":{"offset":{"totalSeconds":7200,"id":"+02:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"zone":{"id":"Europe/Berlin","rules":{"fixedOffset":false,"transitionRules":[{"month":"MARCH","timeDefinition":"UTC","standardOffset":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetBefore":{"totalSeconds":3600,"id":"+01:00","rules":{"fixedOffset":true,"transitionRules":[],"transitions":[]}},"offsetAfter":{"totalSeconds":7200,"id":"+02:00", ...
Run Code Online (Sandbox Code Playgroud)

我只是有一个spring-boot-starter-web应用程序,使用spring-boot-starter-jetty和排除spring-boot-starter-tomcat.

杰克逊为什么在Spring Boot中表现得像这样?

**更新** …

java json jackson spring-boot zoneddatetime

27
推荐指数
3
解决办法
2万
查看次数

ZonedDateTime toString与ISO 8601的兼容性

我正在努力确保调用toString()我的ZonedDateTimeObject符合ISO-8601格式.

toString()方法的文档说明:

...如果偏移和ID相同,则输出与ISO-8601兼容

这是否意味着存在一种情况,即呼叫 zdt.getOffset() 会返回不同的东西 zdt.getZone().getRules().getOffset(zdt.toInstant())

这似乎没有意义.

有人可以提供偏移和ID不相同的示例(即:toString()不符合ISO-8601的地方),以便我可以更好地理解文档中的描述.

谢谢.

java time java-time zoneddatetime

15
推荐指数
2
解决办法
1万
查看次数

在时区将ZonedDateTime转换为LocalDateTime

我有一个ZonedDateTime像这样构造的对象

ZonedDateTime z = ZonedDateTime.of(LocalDate.now().atTime(11, 30), ZoneOffset.UTC);
Run Code Online (Sandbox Code Playgroud)

我如何将其转换LocalDateTime为瑞士时区?预期结果应该是16 april 2018 13:30.

java timezone datetime-conversion java-8 zoneddatetime

15
推荐指数
3
解决办法
2万
查看次数

ZonedDateTime比较:预期:[Etc/UTC]但是:[UTC]

我正在比较似乎相同的两个日期,但它们包含不同的区域名称:一个是Etc/UTC,另一个是UTC.

根据这个问题:UTC和Etc/UTC时区之间有区别吗? - 这两个区域是相同的.但我的测试失败了:

import org.junit.Test;
import java.sql.Timestamp;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import static org.junit.Assert.assertEquals;

public class TestZoneDateTime {

    @Test
    public void compareEtcUtcWithUtc() {
        ZonedDateTime now = ZonedDateTime.now();
        ZonedDateTime zoneDateTimeEtcUtc = now.withZoneSameInstant(ZoneId.of("Etc/UTC"));
        ZonedDateTime zoneDateTimeUtc = now.withZoneSameInstant(ZoneId.of("UTC"));

        // This is okay
        assertEquals(Timestamp.from(zoneDateTimeEtcUtc.toInstant()), Timestamp.from(zoneDateTimeUtc.toInstant()));
        // This one fails
        assertEquals(zoneDateTimeEtcUtc,zoneDateTimeUtc);

        // This fails as well (of course previous line should be commented!)
        assertEquals(0, zoneDateTimeEtcUtc.compareTo(zoneDateTimeUtc));
    }
}
Run Code Online (Sandbox Code Playgroud)

结果:

java.lang.AssertionError: 
Expected :2018-01-26T13:55:57.087Z[Etc/UTC]
Actual   :2018-01-26T13:55:57.087Z[UTC]
Run Code Online (Sandbox Code Playgroud)

更具体地说,我希望,这ZoneId.of("UTC")将等于ZoneId.of("Etc/UTC"),但它们不是!

正如@NicolasHenneaux …

java datetime date datetime-comparison zoneddatetime

13
推荐指数
1
解决办法
5019
查看次数

将字符串转换为Instant

我试图使用java 8或utils包将string中的datetime转换为即时.

例如.

String requestTime = "04:30 PM, Sat 5/12/2018";
Run Code Online (Sandbox Code Playgroud)

Instant reqInstant should result in 2018-05-12T20:30:00.000Z
Run Code Online (Sandbox Code Playgroud)

reqString位于美国/多伦多时区.

这是我试过的

 String strReqDelTime = "04:30 PM, Sat 5/12/2018";
 Date date = new SimpleDateFormat("hh:mm a, EEE MM/dd/yyyy").parse(requestTime);
 Instant reqInstant = date.toInstant();
Run Code Online (Sandbox Code Playgroud)

上面的代码导致了"2018-05-12T23:30:00Z".

任何帮助表示赞赏.

java timezone date zoneddatetime java.time.instant

13
推荐指数
1
解决办法
2万
查看次数

在java.time中设置ZonedDateTime的时间?

如何更改现有ZonedDateTime对象的时间部分?我想保留日期和时区,但改变小时和分钟.

java java-time zoneddatetime

12
推荐指数
1
解决办法
7724
查看次数

客户端发送的请求在语法上是不正确的Java ZonedDateTime后端

我希望得到一些帮助调试此问题.如果我将以下JSON发送到我的后端,它可以正常工作:

{
    "approvalRequired": false,
    "location": {
        "locationName": "<+37.33233141,-122.03121860> +\/- 5.00m (speed 0.00 mps \/ course -1.00) @ 9\/16\/18, 9:24:59 PM Pacific Daylight Time",
        "longitude": -122.0312186,
        "latitude": 37.332331410000002
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我现在发送以下内容:

{
    "approvalRequired": false,
    "scheduledStartTime": "2016-01-01T10:24:00+01:00",
    "location": {
        "locationName": "<+37.33233141,-122.03121860> +\/- 5.00m (speed 0.00 mps \/ course -1.00) @ 9\/16\/18, 9:24:59 PM Pacific Daylight Time",
        "longitude": -122.0312186,
        "latitude": 37.332331410000002
    }
}
Run Code Online (Sandbox Code Playgroud)

我得到了上述错误.在我的后端代码中,我有以下内容:

@DynamoDBTypeConverted(converter = ZonedDateTimeTypeConverter.class)
@DynamoDBAttribute(attributeName = "scheduledStartTime")
public ZonedDateTime scheduledStartTime;
Run Code Online (Sandbox Code Playgroud)

API方法签名如下所示:

@RequestMapping(method = RequestMethod.POST)
public ResponseEntity create(@RequestBody Event event) {...} …
Run Code Online (Sandbox Code Playgroud)

java spring http-status-code-400 swift zoneddatetime

9
推荐指数
1
解决办法
255
查看次数