Timestamp类图
数据成员:
static const int kMicroSecondsPerSecond:微秒与秒之间的进制关系
int64_t microSecondsSinceEpoch_:从1970年1月1日起至当前的微秒数
成员函数:
Timestamp():构造一个microSecondsSinceEpoch_==0的失效时间戳
Timestamp(int64_t microSecondsSinceEpoch):构造一个microSecondsSinceEpoch_==microSecondsSinceEpoch的时间戳
void swap(Timestamp& that):交换that与this的时间戳
string toString() const:将microSecondsSinceEpoch_转换为一个字符串
string toFormattedString() const:将microSecondsSinceEpoch_转换成一个格式化的字符串
bool valid() const:判断时间戳是否有效
int64_t microSecondsSinceEpoch() const:获取microSecondsSinceEpoch_的值
time_t secondsSinceEpoch() const:获取将microSecondsSinceEpoch_转换成秒的值
static Timestamp now():获取当前时间的时间戳
static Timestamp invalid():获取一个microSecondsSinceEpoch_=0的失效时间戳
Timestamp.h
#ifndef MUDUO_BASE_TIMESTAMP_H
#define MUDUO_BASE_TIMESTAMP_H
#include <muduo/base/copyable.h>
#include <muduo/base/Types.h>
#include <boost/operators.hpp>
namespace muduo
值语意:可以拷贝,拷贝之后与原对象脱离关系
对象语义:分为不可以拷贝的和可以拷贝的,但拷贝后与原对象仍存在一定关系,比如共享底层资源
muduo::copyable 空基类,标识类,表示其为值类型,可以拷贝
boost::less_than_comparable 模板类,要求实现<操作符,之后可自动实现>,<=,>=
class Timestamp : public muduo::copyable,
public boost::less_than_comparable<Timestamp>
public:
Timestamp()
: microSecondsSinceEpoch_(0)
explicit Timestamp(int64_t microSecondsSinceEpoch);
void swap(Timestamp& that)
std::swap(microSecondsSinceEpoch_, that.microSecondsSinceEpoch_);
string toString() const;
string toFormattedString() const;
bool valid() const { return microSecondsSinceEpoch_ > 0; }
int64_t microSecondsSinceEpoch() const { return microSecondsSinceEpoch_; }
time_t secondsSinceEpoch() const
{ return static_cast<time_t>(microSecondsSinceEpoch_ / kMicroSecondsPerSecond); }
static Timestamp now();
static Timestamp invalid();
static const int kMicroSecondsPerSecond = 1000 * 1000;
private:
int64_t microSecondsSinceEpoch_;
inline bool operator<(Timestamp lhs, Timestamp rhs)
return lhs.microSecondsSinceEpoch() < rhs.microSecondsSinceEpoch();
inline bool operator==(Timestamp lhs, Timestamp rhs)
return lhs.microSecondsSinceEpoch() == rhs.microSecondsSinceEpoch();
inline double timeDifference(Timestamp high, Timestamp low)
int64_t diff = high.microSecondsSinceEpoch() - low.microSecondsSinceEpoch();
return static_cast<double>(diff) / Timestamp::kMicroSecondsPerSecond;
inline Timestamp addTime(Timestamp timestamp, double seconds)
int64_t delta = static_cast<int64_t>(seconds * Timestamp::kMicroSecondsPerSecond);
return Timestamp(timestamp.microSecondsSinceEpoch() + delta);
#endif
Timestamp.cc
#include <muduo/base/Timestamp.h>
#include <sys/time.h>
#include <stdio.h>
#define __STDC_FORMAT_MACROS
#include <inttypes.h>
#undef __STDC_FORMAT_MACROS
#include <boost/static_assert.hpp>
using namespace muduo;
BOOST_STATIC_ASSERT(sizeof(Timestamp) == sizeof(int64_t));
Timestamp::Timestamp(int64_t microseconds)
: microSecondsSinceEpoch_(microseconds)
string Timestamp::toString() const
char buf[32] = {0};
int64_t seconds = microSecondsSinceEpoch_ / kMicroSecondsPerSecond;
int64_t microseconds = microSecondsSinceEpoch_ % kMicroSecondsPerSecond;
snprintf(buf, sizeof(buf)-1, "%" PRId64 ".%06" PRId64 "", seconds, microseconds);
return buf;
string Timestamp::toFormattedString() const
char buf[32] = {0};
time_t seconds = static_cast<time_t>(microSecondsSinceEpoch_ / kMicroSecondsPerSecond);
int microseconds = static_cast<int>(microSecondsSinceEpoch_ % kMicroSecondsPerSecond);
struct tm tm_time;
gmtime_r(&seconds, &tm_time);
snprintf(buf, sizeof(buf), "%4d%02d%02d %02d:%02d:%02d.%06d",
tm_time.tm_year + 1900, tm_time.tm_mon + 1, tm_time.tm_mday,
tm_time.tm_hour, tm_time.tm_min, tm_time.tm_sec,
microseconds);
return buf;
Timestamp Timestamp::now()
struct timeval tv;
gettimeofday(&tv, NULL);
int64_t seconds = tv.tv_sec;
return Timestamp(seconds * kMicroSecondsPerSecond + tv.tv_usec);
Timestamp Timestamp::invalid()
return Timestamp();
# serve with hot reload at localhost:9080
npm run dev
# build electron application for production
npm run build
# run unit & end-to-end tests
npm test
# lint all JS/Vue component files in `src/`
npm run lint
如果这个项目可以帮助您减少开发时间,可以给我一杯咖啡:)
该项目是通过使用 @ 生成的。
string Timestamp::toString()const{
char buf[32]={0};
int64_t seconds=microSecondsSinceEpoch_/kMicroSecondPerS...
一,什么是时间戳
“时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。
二,时间戳的分类
1、自建时间戳:
此类时间戳是通过时间接收设备(如GPS,CDMA,北斗卫
Timestamp.h头文件,定义了Timestamp类中的相关函数和变量
#ifndef MUDUO_BASE_TIMESTAMP_H //预定义
#define MUDUO_BASE_TIMESTAMP_H
#include <muduo/base/copyable.h> //头文件 copyable.h是一个空实现,仅为了做标识
#include <muduo/base/Types.h> //基本类型的声明
#include <boost/operators
位置:muduo\base\Timestamp.h
// Use of this source code is governed by a BSD-style license
// that can be found in the License file.
//...
copyable类:空基类
boost::less_than_comparable<Timestamp>:类中只需实现operator<(),就可以自动实现operator>(),operator >=(),operator <=()
2.成员函数
距离1970-01-01 00:00:00(查看:man 2 time)的时间
前言之前的文章中已经屡次提到过Flink的事件时间(event time)、水印(watermark)、乱序(out-of-order)、迟到数据(late element)这些概念,虽然它们都非常基础,但笔者还没有对它们做过像样的介绍,感觉不太合适。正好今天脑子比较累,又是Friday night,不适合写复杂的东西,就来谈谈简单的吧。(来源:简书 作者:LittleMagic)事件时间与水印所...
timestamp(时间戳)详解
每一个数据库都有一个计数器,这个计数器记录着数据行的插入、更新行为。如果我们为一个表中增加 timestamp 列,那么,该列将记录每一个数据行的计数器值。假如数据库中当前的计数器是 20(实际中不是数字类型,为了方便解释,这里用数字类型):那么在表 A 中插入一条记录后,插入行的 timestamp 为 21;然后更新表 B 的一条记录后,更新行的...