All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.baidu.bjf.remoting.protobuf.Timestamp Maven / Gradle / Ivy

/*
 * Copyright (c) Baidu Inc. All rights reserved.
 * 
 * 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 com.baidu.bjf.remoting.protobuf;

import java.util.Date;

import com.baidu.bjf.remoting.protobuf.annotation.Protobuf;

/**
 * 
 * A Timestamp represents a point in time independent of any time zone
 * or calendar, represented as seconds and fractions of seconds at
 * nanosecond resolution in UTC Epoch time. It is encoded using the
 * Proleptic Gregorian Calendar which extends the Gregorian calendar
 * backwards to year one. It is encoded assuming all minutes are 60
 * seconds long, i.e. leap seconds are "smeared" so that no leap second
 * table is needed for interpretation. Range is from
 * 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z.
 * By restricting to that range, we ensure that we can convert to
 * and from  RFC 3339 date strings.
 * See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
 * Example 1: Compute Timestamp from POSIX `time()`.
 *     Timestamp timestamp;
 *     timestamp.setSeconds(time(NULL));
 *     timestamp.setNanos(0);
 * Example 2: Compute Timestamp from POSIX `gettimeofday()`.
 *     struct timeval tv;
 *     gettimeofday(&tv, NULL);
 *     Timestamp timestamp;
 *     timestamp.setSeconds(tv.tv_sec);
 *     timestamp.setNanos(tv.tv_usec * 1000);
 * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
 *     FILETIME ft;
 *     GetSystemTimeAsFileTime(&ft);
 *     UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
 *     // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
 *     // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
 *     Timestamp timestamp;
 *     timestamp.setSeconds((INT64) ((ticks / 10000000) - 11644473600LL));
 *     timestamp.setNanos((INT32) ((ticks % 10000000) * 100));
 * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
 *     long millis = System.currentTimeMillis();
 *     timestamp.setSeconds(millis / 1000);
 *     timestamp.setNanos((int) ((millis % 1000) * 1000000));
 * 
* * @author xiemalin * @since 2.3.0 */ public class Timestamp { /** The seconds. */ @Protobuf(fieldType = FieldType.INT64) private Long seconds; /** The nanos. */ @Protobuf(fieldType = FieldType.INT32) private Integer nanos; /** * getter method for property seconds. * * @return the seconds */ public Long getSeconds() { return seconds; } /** * setter method for property seconds. * * @param seconds the seconds to set */ public void setSeconds(Long seconds) { this.seconds = seconds; } /** * getter method for property nanos. * * @return the nanos */ public Integer getNanos() { return nanos; } /** * setter method for property nanos. * * @param nanos the nanos to set */ public void setNanos(Integer nanos) { this.nanos = nanos; } /** * Sets the date. * * @param date the new date */ public void setDate(Date date) { if (date == null) { throw new IllegalArgumentException("param 'date' is null"); } setSeconds(date.getTime() / 1000L); setNanos((int) (date.getTime() % 1000) * 1000000); } @Override public String toString() { return "Timestamp [seconds=" + seconds + ", nanos=" + nanos + "]"; } /** * Gets the date. * * @return the date */ public Date getDate() { return new Date(getSeconds() * 1000); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy