我有一些Date
由Calendar.getInstance()
(在我所在的当地时区)获得。
public final class Converter {
private static final TimeZone UTC_ZONE = TimeZone.getTimeZone("UTC");
private Converter() {
}
public static int toPackedUTCDate(Date date) {
Calendar c = Calendar.getInstance(UTC_ZONE);
c.setTime(date);
int year = c.get(Calendar.YEAR); // UTC year
int month = c.get(Calendar.MONTH); // UTC month
int dayOfMonth = c.get(Calendar.DAY_OF_MONTH); // UTC day of month
return TimeUtils.packDate(dayOfMonth, month, year);
}
}
当然,这是一个错误的代码,但如何正确? Cuz date
是由Calendar.getInstance().getTime()
获得的。对不起,我真的无法得到所有这些时区......如果有人能清楚地解释我,我将非常感激。我只需要用户可以输入他的日期(在他当地的时区),我的应用程序已经以自己的打包格式存储为UTC日期。
答案 0 :(得分:2)
LocalDate.now( ZoneOffset.UTC )
你正在使用现在遗留下来的麻烦的旧日期时间类,取而代之的是 java.time 类。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
如果要使用JVM的当前默认时区,请求它并作为参数传递。如果省略,则隐式应用JVM的当前默认值。最好是明确的。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
如果您想要UTC,请使用定义为ZoneOffset.UTC
的常量。
LocalDate todayUtc= LocalDate.now( ZoneOffset.UTC ) ;
抱歉,我真的无法获得所有这些时区
这些概念已经在Stack Overflow上进行了很多次讨论,有时非常深入。
发布前彻底搜索。搜索Instant
,ZoneId
,ZoneOffset
,“java.time”,OffsetDateTime
,ZonedDateTime
,DateTimeFormatter
。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
答案 1 :(得分:1)
import org.scalatest.mockito.MockitoSugar
import org.mockito.Mockito.when
val config = mock[Config]
val httpConfig = mock[config.Http.type]
when(httpConfig.host).thenReturn("www.example.com")
when(httpConfig.port).thenReturn(80)
when(config.Http).thenReturn(httpConfig)