mirror of
https://github.com/google/nomulus
synced 2026-05-13 19:31:46 +00:00
Our existing precision is milliseconds so we want to stick with that for Instants. If we want to increase the precision globally after that we can do so all in one go post-migration, but for now, it would be a bad thing to have mixed precision going on just depending on whether a class happens to be migrated yet or not. This PR also migrates all existing DateTime.nowUtc() calls to use the Clock interface, so that when they are migrated they will get the benefit of this precision-setting as well. BUG= http://b/496985355
48 lines
1.6 KiB
Java
48 lines
1.6 KiB
Java
// Copyright 2017 The Nomulus Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package google.registry.util;
|
|
|
|
import static org.joda.time.DateTimeZone.UTC;
|
|
|
|
import jakarta.inject.Inject;
|
|
import java.time.Instant;
|
|
import javax.annotation.concurrent.ThreadSafe;
|
|
import org.joda.time.DateTime;
|
|
|
|
/** Clock implementation that proxies to the real system clock. */
|
|
@ThreadSafe
|
|
public class SystemClock implements Clock {
|
|
|
|
private static final long serialVersionUID = 5165372013848947515L;
|
|
|
|
@Inject
|
|
public SystemClock() {}
|
|
|
|
/** Returns the current time. */
|
|
@Override
|
|
public DateTime nowUtc() {
|
|
return DateTime.now(UTC);
|
|
}
|
|
|
|
@Override
|
|
public Instant now() {
|
|
// Truncate to milliseconds to match the precision of Joda DateTime and our database schema
|
|
// (which uses millisecond precision via DateTimeConverter). This prevents subtle comparison
|
|
// bugs where a high-precision Instant would be considered "after" a truncated database
|
|
// timestamp.
|
|
return Instant.now().truncatedTo(java.time.temporal.ChronoUnit.MILLIS);
|
|
}
|
|
}
|