現在時刻の取得方法まとめ
どんな言語で実装しても現在時刻(ミリ秒まで)を取得したいときがしばしばあるので、
yyyy/MM/dd HH:mm:ss.SSS
で標準出力する例をまとめておく。
shell
date
コマンドを使う。たぶん一番簡単。
date '+%Y/%m/%d %H:%M:%S.%3N'
C#
System.DateTime.Now
を使うと簡単。
string now = System.DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss.fff");
System.Console.WriteLine(now);
Java
java.util.Calendar
を使う方法もあるけど、java.text.SimpleDateFormat
を使うと簡単。
String now = new java.text.SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS").format(new java.util.Date());
System.out.println(now);
Python
datetime
を使う。strftime
があるので整形も簡単。
from datetime import datetime
now = datetime.now().strftime("%Y/%m/%d %H:%M:%S.%f")
print(now)
JavaScript
Date
オブジェクトを生成するだけなのに、いつも整形がめんどくさい。
var now = new Date();
var now_str = now.getFullYear() + "/" + ("0"+(now.getMonth()+1)).slice(-2) + "/" + ("0"+now.getDate()).slice(-2) + " "+ ("0"+now.getHours()).slice(-2) + ":" + ("0"+now.getMinutes()).slice(-2) + ":" + ("0"+now.getSeconds()).slice(-2) + "." + ("00"+now.getMilliseconds()).slice(-3);
console.log(now_str);
C
gettimeofday()
を使えばマイクロ秒まで取得できる。
printf
が使えるので整形は簡単だが、取得までがめんどくさい。
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <errno.h>
int main(void){
struct tm *now; // 年/月/日/時/分/秒などのメンバを持つ構造体
struct timeval total_usec; // 経過秒取得用変数
int year, month, day, hour, min, sec, usec;
/* 現在時刻(経過秒)取得 */
if(gettimeofday(&total_usec, NULL) == -1){
fprintf(stderr,"gettimeofday ERRNO=%d", errno);
return -1;
}
/* 経過秒変換 */
now = localtime(&total_usec.tv_sec); // 経過秒を日本時刻に変換
year = now->tm_year+1900; //今年に変換
month = now->tm_mon+1; //今月に変換
day = now->tm_mday; //今日を取得
hour = now->tm_hour;
min = now->tm_min;
sec = now->tm_sec;
usec = total_usec.tv_usec; //マイクロ秒
printf("%d/%02d/%02d %02d:%02d:%02d.%d\n",year,month,day,hour,min,sec,usec);
return(0);
}
Swift
import UIKit
let formatter = DateFormatter()
formatter.dateFormat = "yyyy/MM/dd HH:mm:ss.SSS"
print(formatter.string(from: Date()))
SQL
CURRENT_TIMESTAMP
関数を使う。引数は精度で(6)
だとマイクロ秒まで取得できる。
SELECT CURRENT_TIMESTAMP(3);
整形する場合は、データベースごとに用意されている独自関数を利用する。
mysql
SELECT DATE_FORMAT(CURRENT_TIMESTAMP(3),'%Y/%m/%d %H:%i:%S.%f');
postgresql
SELECT TO_CHAR(CURRENT_TIMESTAMP(3), 'YYYY/MM/DD HH:MI:SS.MS');