最近遇到一个需求,其中一个内容就是利用当前时间进行文件命名 - 年月日时分秒毫秒,这样能够保证文件命名的唯一性和实时性
这种需求应该会经常遇到,所以记录下如何在 C/C++/Java
环境下进行时间的查询和使用
主要内容:
C/C++
环境Java
环境
C/C++
环境
C/C++
环境
年月日时分秒
使用头文件:
<time.h>
使用函数:
time() // 得到从标准计时点(一般是1970年1月1日午夜)到当前时间的秒数
localtime() // 返回一个以 tm 结构表达的机器时间信息
使用结构体:
struct tm {
int tm_sec; // 秒 [0-59]
int tm_min; // 分 [0-59]
int tm_hour; // 时 [0-59]
int tm_mday; // 每月第几天 [1-31]
int tm_mon; // 月 [0-11] 0 表示 1 月,实际使用中要加上 1
int tm_year; // 年 从 1990 开始计算,所以实际使用中要加上 1900
int tm_wday; // 每星期第几天 [0-6] 0 表示星期一
int tm_yday; // 每年第几天 [0-365] 0 表示1月1日
int tm_isdst;
};
计算函数如下:
string getTime() {
time_t tt = time(NULL);
struct tm *stm = localtime(&tt);
char tmp[32];
sprintf(tmp, "%04d-%02d-%2d-%2d-%2d-%02d", 1900 + stm->tm_year, 1 + stm->tm_mon, stm->tm_mday, stm->tm_hour,
stm->tm_min, stm->tm_sec);
return tmp;
}
计算结果:
2018-04-29-13-41-02
参考
毫秒(millisecond)
在 Linux
环境下可以使用函数 gettimeofday
来计算
使用头文件:
<sys/time.h>
使用函数:
gettimeofday() // 获得当前精确时间(1970年1月1日到现在的时间)
使用结构体:
struct timeval
{
long tv_sec; // 秒数
long tv_usec; // 微秒数
};
参数 tv_sec 表示标准时间点到当前时间的秒数,参数 tv_usec 表示余下不足一秒的时间
计算函数如下:
string getMillisecond() {
struct timeval tv;
gettimeofday(&tv, NULL);
int ms = tv.tv_sec * 1000 + tv.tv_usec / 1000;
return to_string(ms);
}
计算结果:
269562647
获取的结果就是标准时间点到当前时间的毫秒数
在 Windows
环境下可以使用函数 GetTickCount()
计算当前毫秒数
参考
Linux C语言应用 - main函数解析,时间函数,C语言代码的分配机制(malloc,calloc,realloc,free)
获取时间命名函数
结合上面两小节,可以获取当前的年月日时分秒毫秒的命名:
/**
* 获取时间命名字符串,格式:年月日时分秒毫秒
* @return
*/
string getTimeName() {
time_t tt = time(NULL);
struct tm *stm = localtime(&tt);
struct timeval tv;
gettimeofday(&tv, NULL);
int ms = tv.tv_usec / 1000;
char tmp[32];
sprintf(tmp, "%04d%02d%02d%02d%02d%02d%03d", 1900 + stm->tm_year, 1 + stm->tm_mon, stm->tm_mday, stm->tm_hour,
stm->tm_min, stm->tm_sec, ms);
return tmp;
}
计算结果:
20180506163838469
Java
环境
Java
环境
使用类 Calendar
即可获取年月日时分秒以及毫秒:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millisecond = calendar.get(Calendar.MILLISECOND);
String stime = String.format("%04d-%02d-%02d %02d-%02d-%02d %03d", year, month, day, hour, minute, second, millisecond);
System.out.println(stime);
}
计算结果如下:
2018-03-29 02-47-34 589
获取时间命名函数如下:
/**
* 获取时间命名字符串,格式:年月日时分秒毫秒
* @return
*/
public static String getTimeName() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millisecond = calendar.get(Calendar.MILLISECOND);
String stime = String.format("%04d%02d%02d%02d%02d%02d%03d", year, month, day, hour, minute, second, millisecond);
return stime;
}
计算结果:
20180406044045246