gpt4 book ai didi

java - GregorianCalendar 给出错误的天数

转载 作者:行者123 更新时间:2023-12-01 19:57:14 24 4
gpt4 key购买 nike

我有下面的代码,我试图在其中发布带有日期和数量的销售订单交易,一旦我',getting交易日期当天,滞后了31天,显然12月1日被认为是一年中的第一天!我的代码有什么问题,或者我该如何修复它?!

import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.*

data class transaction (var date: LocalDate, var quantity: Double) {

private var calendar: Calendar =
GregorianCalendar(date.year, date.monthValue, date.dayOfMonth)
var day: Int
get() = calendar.get(Calendar.DAY_OF_YEAR)
set(value) = TODO()
}

val formatter: DateTimeFormatter
get() = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.ENGLISH)

fun main(args: Array<String>) {
var salesOrders = ArrayList<transaction>()
salesOrders.add(transaction(LocalDate.parse("01.01.2018", formatter), 5.0))

println(salesOrders[0].date.dayOfMonth) // prints: 1
println(salesOrders[0].date.monthValue) // prints: 1
println(salesOrders[0].date.year) // prints: 2018
println(salesOrders[0].day) // prints 32 ??!!
}

最佳答案

我建议您完全放弃使用 CalendarGregorianCalendar

    println(salesOrders[0].date.dayOfYear)  // prints 1

我还没有Kotlin,所以没有测试过。如果有无法解决的拼写错误,请在评论中跟进。

CalendarGregorianCalendar 早已过时,LocalDate 所属的现代 Java 日期和时间 API 更好用。并提供您可能想要的所有功能。

我从您的评论中了解到,多年来您的每一天都需要一个唯一的标识符。您一直在使用calendar.timeInMillis。首先,这是一个很差的标识符,因为它随时区的不同而变化。相反,我建议使用 LocalDate 本身或其从 date.toString 获取的字符串表示形式。如果您需要数字标识符(例如 calendar.timeInMillis),则可以使用 date.toEpochDay。这是自 1970 年 1 月 1 日纪元以来的天数计数,因此每天都是唯一的(并且不受时区影响)。

关于java - GregorianCalendar 给出错误的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49212986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com