プログラム言語 標準関数(日時系)

日時フォーマット

ISO8601
ISOで定められた日付と時刻の表記に関する国際規格

Format TimeZone 基本書式 拡張書式
yyyy-MM-ddTHH:mm:ss 日本標準時JST 20000101T010101+0900 2000-01-01T01:01:01+0900
協定世界時UTC 20000101T010101 2000-01-01T01:01:01

時間型変数

DateTime myDate1 = new DateTime();
DateTime myDate1 = new DateTime(2000, 1, 1, 10, 10, 10);

システム日時
DateTime dt = DateTime.Now;

Dim myDate1 As New DateTime();
Dim myDate1 As New DateTime(2000, 1, 1, 10, 10, 10);
Date型
import java.util.Date;

現在日時の取得
Date date = new Date();
System.out.println(date);
⇒ Sat Feb 14 12:19:10 JST 2015

1970年1月1日午前0時(GMT)から現在までの経過時間(ミリ秒)
long nowTime = date.getTime();

1000ミリ秒 × 60 ⇒ 1分
× 60 ⇒ 1時間
× 24 ⇒ 1日

long oneday = 1000 * 60 * 60 * 24;

現在から、1日後の時間
Date date = new Date(nowTime + oneday);
⇒ 1970年1月2日午前0時(GMT)

Calendar型
import java.util.Calendar;

現在日時の取得
Calendar calendar = Calendar.getInstance();
calendar.set(2000, 1, 1,10,0,0);

Date型 ⇒ Calendar型 変換
calendar.setTime(date);

Calendar型 ⇒ Date型 変換
Date date = calendar.getTime();

現在日時
date_default_timzone_set('Asia/Tokyo');
$date = date('Y/m/d H:i:s');

$date = new DateTime();
$date = $date->format('Y-m-d');

任意の日時
$date = new DateTime('2019-1-1 15:15:15');
$date = $date->format('Y-m-d H:i:s');

$date = new DateTime();
$date->setDate(2019,1,1)->setTime(15,15,15);

use Carbon\Carbon;

現在時刻
$date = Carbon::now();
→2021-05-26 03:37:45.413718 Asia/Tokyo (+09:00)

$date = Carbon::today();
→2021-05-26 00:00:00

UTC時刻
$date = Carbon::now('UTC');

日付を指定して取得
$date = Carbon::create(2019, 1, 2, 3, 4, 5);
→2021-01-02 03:04:05.0 Asia/Tokyo (+09:00)

$date = new \DateTime();
「\」が必要。他は同じ
import datetime

現在日付、日時
print(datetime.date.today())
print(datetime.datetime.today())

指定日付、指定日時
now = datetime.date(2019,1,1)

print(now.year) #2019
print(now.month) #1
print(now.day) #1

var nowTime = new Date();
nowTime : Thu Oct 16 2014 04:27:31 GMT+0900

var myDate = new Date(2000,1,1,1,1,1);
2000年1月1日1時1分1秒を作成

現在日付
echo %DATE%
2019/01/01

現在日時
echo %TIME%
10:10:10

時・分・秒等の取得

Carbon::now()
Carbon::today()
Carbon::yesterday()
Carbon::tomorrow()

月初
Carbon::now()->startOfMonth();
月末 の(00:00:00)
Carbon::now()->lastOfMonth();
月末 の(23:59:59)
Carbon::now()->endOfMonth();
その日の 00:00:00
Carbon::now()->startOfDay();
その日の 23:59:59.999999
Carbon::now()->endOfDay();

$date = new DateTime();

文字列 数値
$date->format('Y'); $date->y
$date->format('m'); $date->m
$date->format('d'); $date->d
$date->format('H'); $date->h
$date->format('i'); $date->i
$date->format('s'); $date->s
$date->format('w');
->0:日 1:月 〜 6:土
$weeks['日', '月', 〜 '土'];
$weeks[$date->format('w')];
import datetime

now = datetime.datetime(2019,1,1,10,10,10)
print(now.hour) #10
print(now.minute) #10
print(now.second) #10
print(now.date()) #2019-01-01
print(now.time()) #10:10:10
print(now.weekday()) #1(火曜日)
# 0 : 月曜日, 1 : 火曜日, 2 : 水曜日, 3 : 木曜日, 4 : 金曜日, 5 : 土曜日, 6 : 日曜日

import calendar
月初と月末を配列で取得
range = calendar.monthrange(2024, 1) #1, 31
月末
end_day = calendar.monthrange(2024, 1)[1] #31

DateTime myTime = new DateTime();

int h = myTime.Hour;
int m = myTime.Minute;
int s = myTime.Second;
int ms = myTime.Millisecond;
int y = myTime.Year;
int m = myTime.Month;
int d = myTime.Day;
DayOfWeek week = myTime.DayOfWeek;
⇒ week : DayOfWeek.Saturday

Year()、DateTime.Year()
ReturnValue = DateTime.Year(“2009/12/31”)
ReturnValue = “2009”

Month()、DateTime.Month()
ReturnValue = DateTime.Month(“2009/12/31”)
ReturnValue = “12”

Day()、DateTime.Day()
ReturnValue = DateTime.Day(“2009/12/31”)
ReturnValue = “31”

WeekDay()、DateTime.WeekDay()
ReturnValue = DateTime.WeekDay(“2009/12/31”)
ReturnValue = “5” (1:日、2:月、3:火)

WeekDayName()
ReturnValue = WeekDayName(4)
ReturnValue = “水” (1:日、2:月、3:火)

Hour()、DateTime.Hour()
ReturnValue = DateTime.Hour(“15:30”)
ReturnValue = 15

Minute()、DateTime.Minute()
ReturnValue = DateTime.Minute(“15:30”)
ReturnValue = 30

Second()、DateTime.Second()
ReturnValue = DateTime.Second(“15:30:45”)
ReturnValue = 45

【ミリ秒を取得する場合】
※標準関数ではミリ秒を取得できない

Public Declare Sub GetLocalTime Lib “kernel32” (lpSystemTime As SYSTEMTIME)

Public Type SYSTEMTIME
 wYear As Integer
 wMonth As Integer
 wDayOfWeek As Integer
 wDay As Integer
 wHour As Integer
 wMinute As Integer
 wSecond As Integer
 wMilliseconds As Integer
End Type

Dim typeNow As SYSTEMTIME
Dim sglNow As Single

Call GetLocalTime(typeNow)
sglNow = CSng(typeNow.wSecond & “.” & typeNow.wMilliseconds)

import java.util.Calendar;

Calendar calendar = Calendar.getInstance();
calendar.set(2000, 1, 1, 10, 0, 0);

int y = calendar.get(Calendar.YEAR);
int m = calendar.get(Calendar.MONTH);
int d = calendar.get(Calendar.DATE);
int w = calendar.get(Calendar.WEDNESDAY);
int h1 = calendar.get(Calendar.HOUR);
int h2 = calendar.get(Calendar.HOUR_OF_DAY);
int min = calendar.get(Calendar.MINUTE);
int sec = calendar.get(Calendar.SECOND);
int ms = calendar.get(Calendar.MILLISECOND);
int ampm = calendar.get(Calendar.AM_PM);

var myDate = new Date();

var y = myDate.getFullYear();
var m = myDate.getMonth();
var d = myDate.getDate();
var h = myDate.getHours();
var m = myDate.getMinutes();
var s = myDate.getSeconds();
var ms = myDate.getMilliseconds();

曜日
var w = myDate.getDay();

1970年1月1日00:00:00からの経過時間をミリ秒で取得
var ms = myDate.getTime();

日付の整形
SET yyyymmdd=%DATE:-10,4%%DATE:-10,4%%date:~8,2%
SET yyyy=%DATE:~-10,4%
SET mm=%DATE:~-5,2%
SET dd=%date:~8,2%

日付名のファイルへ出力
echo ~ >> test%yyyymmdd%.log
test20190101.log

加減

ミュータブルインスタンス利用
use Carbon\Carbon;
$before = Carbon::create(2021, 1, 2, 3, 4, 5);

$after = $before->addDays(1);
→before:2021/01/03 03:04:05.000000
→after:2021/01/03 03:04:05.000000

イミュータブルインスタンス利用
use Carbon\CarbonImmutable;
$before = CarbonImmutable::create(2021, 1, 2, 3, 4, 5);

$after = $before->addDays(1);
→before:2021/01/02 03:04:05.000000
→after:2021/01/03 03:04:05.000000


addYears(n), addMonths(n), addDays(n), addHours(n), addMinutes(n), addSeconds(n)
subYears(n), subMonths(n), subDays(n), subHours(n), subMinutes(n), subSeconds(n)

$datetime = new DateTime();
$datetime = $datetime->modify(~);

$~->modify('+1 year');  1年後 
$~->modify('+1 month');  1か月後
$~->modify('+1 day');   1日後 
$~->modify('+1 week');  1週間後
$~->modify('+1 hour');  1時間後
$~->modify('+1 minute'); 1分後 
$~->modify('+1 second'); 1秒後 
月初  $~->modify('first day of this months');   当月1日    
月末  $~->modify('last day of this months');   当月末尾   
翌月初 $~->modify('first day of next months');   来月1日    
先月末 $~->modify('first day of last months');   先月1日    
翌週  $~->modify('sunday');            次の日曜日  
今週  $~->modify('monday this week');       今週の月曜日 
指定週 $~->modify('third sunday of this months')  第三日曜日  
複合  $~->modify('+1 months + 1 days + 1 hours'); 1ヶ月1日1時間後
import datetime
from dateutil.relativedelta import relativedelta

before = datetime.date.today()
after = before + relativedelta(days=1)
after = before + relativedelta(months=1)
after = before + relativedelta(years=1)

引数

意味

years

months

days

weeks

hours

minutes

seconds

microseconds

マイクロ秒

var myDate = new Date();

myDateから取得した年に1を加算
myDate.setYear(myDate.getFullYear() + 1);

myDateから取得した月に1を加算
myDate.setMonth(myDate.getMonth() + 1);

myDateから取得した日に1を加算
myDate.setDate(myDate.getDate() + 1);

myDateから取得した時間に1を加算
myDate.setHours(myDate.getHours() + 1);

myDateから取得した分に1を加算
myDate.setMinutes(myDate.getMinutes() + 1);

myDateから取得した秒に1を加算
myDate.setSeconds(myDate.getSeconds() + 1);

myDateから取得したミリ秒に1ミリ秒を加算
myDate.setMilliseconds(myDate.getMilliseconds() + 1);

dt = dt.Add(TimeSpan value);
dt = dt.AddDays(double value);
dt = dt.AddHours(double value);
dt = dt.AddMilliseconds(double value);
dt = dt.AddMinutes(double value);
dt = dt.AddMonths(int months);
dt = dt.AddSeconds(double value);
dt = dt.AddTicks(long value);
dt = dt.AddYears(int value);
import java.util.Calendar;

Calendar calendar = Calendar.getInstance();

10日後
calendar.add(Calendar.DATE, 10);
10時間後
calendar.add(Calendar.HOUR, 10);

表示形式

use Carbon\Carbon;
$date = Carbon::create(2021, 1, 2, 3, 4, 5);

$after = $date->format('Y/m/d H:i:s.u');
→2021/01/02 03:04:05.000000

$after = $date->format(DATE_ATOM);
→2021-01-02T03:04:05+09:00

曜日
$after = $date->format('w');
→0(日)、1(月)...6(土)

$after = $date->format('N'); ※ISO-8601形式
→1(日)、2(月)...7(土)

$after = $date->format('D');
Sun, Mon...Sat

$after = $date->format('l'); ※Lの小文字
Sundeay, Monday...Saturday

$result = $date->format('Y/m/d');
$result = $date->format('Y/m/d H:i:s');

$time = $date->getTimestamp();
$his = gmdate('h:i:s', $time);

DateTime myDate = new DateTime(2005, 1, 1, 10, 10, 10);
string disp9 = myDate.ToString("yyyy/MM/dd(ddd) hh:mm:ss");
⇒disp9 : 2005/01/01(土) 10:10:10

string disp10 = myDate.ToString("yy年M月d日 ddd曜日 h時m分s秒");
⇒disp10 : 05年1月1日 土曜日 10時10分10秒

24時間表記
string dt = new DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss");

12時間表記
string dt = new DateTime.Now.ToString("yyyy/MM/dd hh:mm:ss");

Dim myDate As DateTime = New DateTime(2005, 1, 1, 10, 10, 10)
Dim disp9 As String = myDate.ToString("yyyy/MM/dd(ddd) hh:mm:ss")
'⇒disp9 : 2005/01/01(土) 10:10:10

Dim disp10 As String = myDate.ToString("yy年M月d日ddd曜日 h自m分s秒")
'⇒disp10 : 05年1月1日 土曜日 10時10分10秒

SimpleDateFormat myFormat = new SimpleDateFormat("yyyy年MM月dd日 E曜日 a hh時mm分ss秒");
System.out.println(myFormat.format(date));
⇒ 2015年02月14日 土曜日 午後 04時50分53秒

myFormat.applyPattern("yyyy/MM/dd kk:mm:ss");
System.out.println(myFormat.format(date));
⇒ 2015/02/14 16:49:40

$query = $this->モデル名->find();

$date_format = $query->func()->date_format([
    'date' => 'identifier',
    '"%Y/%m/%d"' => 'identifier'
  ]);

$date = $query
  ->select(['aaa' => $date_format])
  ->all();

#日付→文字列
str = datetime.datetime(2019,1,1,10,10,10).strftime('%Y/%m/%d %H:%M:%S')
print(str) #2019/01/01 10:10:10

時間(日)差

$isBefore = Carbon::today()->isBefore(Carbon::now());
$isAfter = Carbon::today()->isAfter(Carbon::now());
2つのDateTime変数の時間差
$datetime1 = 〜;
$datetime2 = 〜;
$diff = datetime1->diff($datetime2);

$y = $diff->y
$m = $diff->m
$d = $diff->d
$h = $diff->h
$i = $diff->i
$s = $diff->s

$diff = datetime1->getTimestamp() - $datetime2)->getTimestamp();

DateTime myDate1 = new DateTime(2000, 1, 1, 10, 10, 10);
DateTime myDate2 = new DateTime(2000, 2, 1, 10, 10, 10);

int diffYear = myDate2.Year - myDate1.Year;
int diffMonth = myDate2.Month - myDate1.Month;
int diffDay = myDate2.Day - myDate1.Day;

TimeSpan span = myDate2 - myDate1;
diffDay = span.Days;

int diffHour = myDate2.Hour - myDate1.Hour;
diffHour = span.Hours;

int diffMinute = myDate2.Minute - myDate1.Minute;
diffMinute = span.Minutes;

int diffSecond = myDate2.Second - myDate1.Second;
diffSecond = span.Seconds;

Dim myDate1 As New Date(2000, 1, 1, 10, 10, 10)
Dim myDate2 As New Date(2000, 2, 1, 10, 10, 10)

Dim diffYear As Integer = DateDiff(DateInterval.Year, myDate1, myDate2)
Dim diffMonth As Integer = DateDiff(DateInterval.Month, myDate1, myDate2)
Dim diffDay As Integer = DateDiff(DateInterval.Day, myDate1, myDate2)
Dim diffDayOfYear As Integer = DateDiff(DateInterval.DayOfYear, myDate1, myDate2)
Dim diffWeekday As Integer = DateDiff(DateInterval.Weekday, myDate1, myDate2)

Date beforeDate = new Date();
System.out.println(beforeDate);
Sat Feb 14 19:11:07 JST 2015

↑の1分後
Date afterDate = new Date(beforeDate.getTime() + 60000);
System.out.println(afterDate);
Sat Feb 14 19:12:07 JST 2015

Boolean beforeAfter;
日時が前か?
beforeAfter = beforeDate.before(afterDate);
beforeAfter : true

日時が後か?
beforeAfter = beforeDate.after(afterDate);
beforeAfter : false

時間差(ミリ秒)
long timeDiff = afterDate.getTime() - beforeDate.getTime();
timeDiff : 60000

Calendar beforeCal = Calendar.getInstance();
Calendar afterCal = Calendar.getInstance();
afterCal.setTimeInMillis(beforeCal.getTimeInMillis());
afterCal.add(Calendar.MINUTE, 1);

時間差(ミリ秒)
timeDiff = afterCal.getTimeInMillis() - beforeCal.getTimeInMillis();
timeDiff : 60000

2つの時刻の差をミリ秒で取得(「時・分・秒等の取得/getTime()」参照)
var time = myDate1.getTime() - myDate1.getTime2();

文字列変換

string[] strDate = {
  "2014/1/1",
  "1/1",
  "2014/2/30",
  "2014/1/1 10:10:10",
  "2014/1/1 10:10:65"
};

try
{
  foreach (string elm in strDate)
  {
    DateTime dteTest = DateTime.Parse(s: elm);
    ⇒ {2014/01/01 00:00:00}
    ⇒ {2014/01/01 00:00:00}
    ⇒ エラー
    ⇒ {2014/01/01 10:10:10}
    ⇒ エラー
  }
}
catch (Exception ex)
{
  Console.WriteLine(ex.Message);
}

foreach (string elm in strDate)
{
  DateTime dteResult;
  if (DateTime.TryParse(s:elm, result: out dteResult))
  {
    Console.WriteLine(dteResult.ToString());
    ⇒ {2014/01/01 00:00:00}
    ⇒ {2014/01/01 00:00:00}
    ⇒ {2014/01/01 10:10:10}
  }
}

use Carbon\Carbon;
$date = Carbon::parse('2021/01/02 03:04:05');
#文字列→日付
date = datetime.datetime.strptime('2019/1/1 10:10:10', '%Y/%m/%d %H:%M:%S')
print(date) #2019-01-01 10:10:10

世界協定時刻(UTC)変換

DateTime dt = New DateTime(2000, 9, 24, 15, 30, 0)

世界協定時刻(UTC)に変換する
DateTime utcTime = TimeZoneInfo.ConvertTimeToUtc(dt)

ローカル時刻に変換する
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local)

Dim dt As New DateTime(2000, 9, 24, 15, 30, 0)

'世界協定時刻(UTC)に変換する
Dim utcTime As DateTime = TimeZoneInfo.ConvertTimeToUtc(dt)

'ローカル時刻に変換する
Dim localTime As DateTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, TimeZoneInfo.Local)