如何获取本周以来的毫秒数据?

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

我有一个包含一些数据的数据库,其中每个数据都有一个以毫秒为单位的时间戳。

我需要从数据库获取本周的数据。我有周图表,需要显示本周的数据。

我尝试用谷歌搜索,但没有找到任何适合我的用例的东西。

kotlin time milliseconds
1个回答
0
投票

我将根据一些数据来说明答案。

你所说的毫秒——它必须与某个 0 点或 Epoc 相关。假设这是“Unix epoc”,您可以 (1) 使用

java.time.Instant
将毫秒转换为 Epoc,然后您可以转换为许多日期/时间类之一,例如您需要为其选择时区的 ZoneDateTime (2) (3)

然后你需要计算出本周开始的时间适合你。你说星期一,但那天是午夜?以及在哪个时区。再次假设

UTC
时区,在(5)我们从“现在”“砍掉”小时/分钟等以获得当天的午夜,然后在(6)我们回到上一个星期一。

现在我在(7)处我们可以过滤以将数据集限制为“本周的数据”:

fun main(args: Array<String>) {

    // https://www.epochconverter.com/
    val data = listOf(
        Data(1711916054000L, "Apples"), // Sunday, 31 March 2024 20:14:14 GMT
        Data(1712002454000L, "Orange"), // Monday, 1 April 2024 20:14:14 GMT
        Data(1712175254000L, "Pears"), // Tuesday, 2 April 2024 20:14:14 GMT
    )

    println("Raw data")
    data.forEach {
        it.datetime = ZonedDateTime.ofInstant( // (2)
            Instant.ofEpochMilli(it.millis), // (1)
            ZoneOffset.UTC) // (3)
        println(it)
    }
    println()

    val startOfThisWeek = ZonedDateTime.now(ZoneOffset.UTC) // (4)
        .truncatedTo(ChronoUnit.DAYS) // (5)
        .with(TemporalAdjusters.previous(DayOfWeek.MONDAY)) // (6)
    println("Data for this week, where this week starts on $startOfThisWeek")

    data.filter { startOfThisWeek <= it.datetime }  // (7)
        .forEach { println(it) }

}

data class Data(val millis:Long, val thing: String, var datetime: ZonedDateTime? = null)

输出是

Raw data
Data(millis=1711916054000, thing=Apples, datetime=2024-03-31T20:14:14Z)
Data(millis=1712002454000, thing=Orange, datetime=2024-04-01T20:14:14Z)
Data(millis=1712175254000, thing=Pears, datetime=2024-04-03T20:14:14Z)

Data for this week, where this week starts on 2024-04-01T00:00Z
Data(millis=1712002454000, thing=Orange, datetime=2024-04-01T20:14:14Z)
Data(millis=1712175254000, thing=Pears, datetime=2024-04-03T20:14:14Z)
© www.soinside.com 2019 - 2024. All rights reserved.