/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.hadoop.nfs; import org.apache.hadoop.oncrpc.XDR; /** * Class that encapsulates time. */ public class NfsTime { static final int MILLISECONDS_IN_SECOND = 1000; static final int NANOSECONDS_IN_MILLISECOND = 1000000; private final int seconds; private final int nseconds; public NfsTime(int seconds, int nseconds) { this.seconds = seconds; this.nseconds = nseconds; } public NfsTime(NfsTime other) { seconds = other.getNseconds(); nseconds = other.getNseconds(); } public NfsTime(long milliseconds) { seconds = (int) (milliseconds / MILLISECONDS_IN_SECOND); nseconds = (int) ((milliseconds - this.seconds * MILLISECONDS_IN_SECOND) * NANOSECONDS_IN_MILLISECOND); } public int getSeconds() { return seconds; } public int getNseconds() { return nseconds; } /** * Get the total time in milliseconds */ public long getMilliSeconds() { return (long) (seconds) * 1000 + (long) (nseconds) / 1000000; } public void serialize(XDR xdr) { xdr.writeInt(getSeconds()); xdr.writeInt(getNseconds()); } public static NfsTime deserialize(XDR xdr) { return new NfsTime(xdr.readInt(), xdr.readInt()); } @Override public int hashCode() { return seconds ^ nseconds; } @Override public boolean equals(Object o) { if (!(o instanceof NfsTime)) { return false; } return ((NfsTime) o).getMilliSeconds() == this.getMilliSeconds(); } @Override public String toString() { return "(NfsTime-" + seconds + "s, " + nseconds + "ns)"; } }