blob: e3fbe6d2fff45ccc7ecc23406c730edf741510c8 [file] [log] [blame]
/*
* Copyright (C) 2022 The Android Open Source Project
*
* 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.
*/
export const INVALID_TIME_NS = 0n;
export class TimeRange {
constructor(readonly from: Timestamp, readonly to: Timestamp) {}
containsTimestamp(ts: Timestamp): boolean {
const min = this.from.getValueNs();
const max = this.to.getValueNs();
return ts.getValueNs() >= min && ts.getValueNs() <= max;
}
}
export interface TimezoneInfo {
timezone: string;
locale: string;
}
export interface TimestampFormatter {
format(timestamp: Timestamp, type: TimestampFormatType): string;
}
export enum TimestampFormatType {
FULL,
DROP_DATE,
}
export class Timestamp {
private readonly utcValueNs: bigint;
private readonly formatter: TimestampFormatter;
constructor(valueNs: bigint, formatter: TimestampFormatter) {
this.utcValueNs = valueNs;
this.formatter = formatter;
}
getValueNs(): bigint {
return this.utcValueNs;
}
valueOf(): bigint {
return this.utcValueNs;
}
in(range: TimeRange): boolean {
return (
range.from.getValueNs() <= this.getValueNs() &&
this.getValueNs() <= range.to.getValueNs()
);
}
add(n: bigint): Timestamp {
return new Timestamp(this.getValueNs() + n, this.formatter);
}
minus(n: bigint): Timestamp {
return new Timestamp(this.getValueNs() - n, this.formatter);
}
times(n: bigint): Timestamp {
return new Timestamp(this.getValueNs() * n, this.formatter);
}
div(n: bigint): Timestamp {
return new Timestamp(this.getValueNs() / n, this.formatter);
}
format(type = TimestampFormatType.FULL): string {
return this.formatter.format(this, type);
}
}