Kotlin LocalDateTime为Long [重复]

问题描述 投票:0回答:1

我想把我的LocalDateTime字段保存为长,这样我就可以把它存储在我的SQLite数据库中。我如何才能做到这一点?

var datetime = LocalDateTime.now()
var longdt: Long = getString(datetime).toLong()
java android kotlin localdatetime
1个回答
1
投票

你可以使用 toEpochSecond()ofEpochSecond() 转换成从 long 的值,精确到秒。

例子(在Java中

LocalDateTime now = LocalDateTime.now();
long nowInSeconds = now.toEpochSecond(ZoneOffset.UTC);
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(nowInSeconds, 0, ZoneOffset.UTC);

System.out.println("now = " + now);
System.out.println("nowInSeconds = " + nowInSeconds);
System.out.println("dateTime = " + dateTime);

产量

now = 2020-05-12T12:12:36.984263200
nowInSeconds = 1589285556
dateTime = 2020-05-12T12:12:36

如果你需要 long 精确到毫秒的值,这样做。

LocalDateTime now = LocalDateTime.now();
long nowInMillis = now.toEpochSecond(ZoneOffset.UTC) * 1000
                 + now.get(ChronoField.MILLI_OF_SECOND);
LocalDateTime dateTime = LocalDateTime.ofEpochSecond(nowInMillis / 1000,
                  (int) (nowInMillis % 1000 * 1000000), ZoneOffset.UTC);

System.out.println("now = " + now);
System.out.println("nowInMillis = " + nowInMillis);
System.out.println("dateTime = " + dateTime);

输出

now = 2020-05-12T12:16:38.881510700
nowInMillis = 1589285798881
dateTime = 2020-05-12T12:16:38.881

如果需要,请指定除 UTC但在这种情况下,你应该真正地使用 ZonedDateTimeOffsetDateTime 而不是 LocalDateTime.


0
投票

如果你说的长是指秒数或毫秒数,请用这种方式。

LocalDateTime(以纪元为单位)秒

val seconds = datetime.atZone(ZoneOffset.UTC).toEpochSecond())

LocalDateTime改为epoch毫秒。

val milliseconds = datetime.atZone(ZoneOffset.UTC)?.toInstant()?.toEpochMilli()
© www.soinside.com 2019 - 2024. All rights reserved.