获取年月日时分秒毫秒 C C++ Java

最近遇到一个需求,其中一个内容就是利用当前时间进行文件命名 - 年月日时分秒毫秒,这样能够保证文件命名的唯一性和实时性

这种需求应该会经常遇到,所以记录下如何在 C/C++/Java 环境下进行时间的查询和使用


主要内容:

  • C/C++ 环境
  • Java 环境

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

参考

time.h

C/C++获取本地时间常见方法

毫秒(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() 计算当前毫秒数

参考

timeval structure

Linux 下c获取当前时间(精确到秒和毫秒或者微秒)

gettimeofday

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 环境

使用类 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

猜你喜欢

转载自blog.csdn.net/u012005313/article/details/80215794
今日推荐