C#で日付変換や取得する際に予想通りの結果にならずハマってしまうことありますね。
今回、日付時刻を取得する処理でよく使うコードをまとめました。
メソッド単位でサンプルプログラムを記載しています。使用例で実行した結果を実行結果欄に記載しています。実行結果をみながら求めている処理を探すことができます。
Contents
現在日時を取得
/// <summary>
/// 現在日付を取得する(DateTime:yyyy/MM/dd HH:mm:ss)
/// </summary>
/// <returns>DateTime:yyyy/MM/dd HH:mm:ss</returns>
public static DateTime getNowDateDateTime()
{
DateTime dt = DateTime.Now;
return dt;
}
/// <summary>
/// 現在日付を取得する(string:YYYY/MM/DD hh:mm:ss)
/// </summary>
/// <returns>string:yyyy/MM/dd HH:mm:ss</returns>
public static string getNowDateString()
{
DateTime dt = DateTime.Now;
string sret = dt.ToString();
return sret;
}
/// <summary>
/// 現在日付を取得する(YYYY/MM/DD hh:mm:ss.sss)
/// </summary>
/// <returns>string:yyyy/MM/dd HH:mm:ss.sss</returns>
public static string getNowDateMillisecString()
{
DateTime dt = DateTime.Now;
string sret = dt.ToString() + "." + dt.Millisecond;
return sret;
}
メソッド一覧
DateTime getNowDateDateTime() | DateTime型で現在日付を取得する。 |
string getNowDateString() | String型で現在日付を取得する。(YYYY/MM/DD hh:mm:ss) |
string getNowDateMillisecString() | String型で現在日付を取得する。(YYYY/MM/DD hh:mm:ss.sss) |
使用例
DateTime sresult1 = getNowDateDateTime(); string sresult2 = getNowDateString(); string sresult3 = getNowDateMillisecString(); Console.WriteLine(sresult1); Console.WriteLine(sresult2); Console.WriteLine(sresult3);
2019/09/21 13:49:54
2019/09/21 13:49:54
2019/09/21 13:49:54.271
DateTime型日時変換チェック
/// <summary>
/// 日付時刻の型に変換できるかチェックする
/// DateTime型に変換可否(YYYY/MM/DD hh:mm:ss)
/// </summary>
/// <param name="strDateTime">string:日付時刻</param>
/// <returns>true:変換可能/false:変換不可能</returns>
public static bool isNowDateStringToDateTime(string strDateTime)
{
bool bret = false;
DateTime retDateTime;
if (DateTime.TryParse(strDateTime, out retDateTime))
{
//変換可能
bret = true;
}
return bret;
}
メソッド一覧
bool isNowDateStringToDateTime(string strDateTime) | string型日付がDateTime型に変換可能かチェックする。 |
使用例
bool sresult4 = isNowDateStringToDateTime("2019/09/21 13:00:00"); bool sresult5 = isNowDateStringToDateTime("2019/09/21 13:00:AA"); Console.WriteLine(sresult4); Console.WriteLine(sresult5);
True
False
string型日時とDateTime型相互変換
/// <summary>
/// string型日付時刻をDateTime型にする。
/// 変換できない場合は0001/01/01 0:00:00が返却される
/// </summary>
/// <param name="strDateTime">string:日付時刻</param>
/// <returns>DateTime:日付時刻</returns>
public static DateTime chgDateStringToDateTime(string strDateTime)
{
DateTime retDateTime;
if (!DateTime.TryParse(strDateTime, out retDateTime))
{
//変換不可
//MinValue = 0001/01/01 0:00:00
retDateTime = DateTime.MinValue;
}
return retDateTime;
}
/// <summary>
/// DateTime型日付時刻をstring型にする。
/// </summary>
/// <param name="dt">DateTIme:日付時刻</param>
/// <returns>string:日付時刻</returns>
public static string chgDateDateTimeToString(DateTime dt)
{
return dt.ToString();
}
メソッド一覧
DateTime chgDateStringToDateTime(string strDateTime) | string型日付をDateTime型に変換する。 |
string chgDateDateTimeToString(DateTime dt) | DateTime型をString型日付に変換する。 |
使用例
DateTime sresult6 = chgDateStringToDateTime("2019/09/21 13:00:00");
DateTime sresult7 = chgNowDateStringToDateTime(DateTime.Now);
Console.WriteLine(DateTime.Now);
Console.WriteLine(sresult6);
Console.WriteLine(sresult7);
2019/09/21 13:00:00
2019/09/21 13:00:00
2019/09/21 13:00:00
DateTime型日時とシリアル相互変換
/// <summary>
/// DateTime型の日付時刻をlong型シリアル値に変換する。
/// </summary>
/// <param name="strDateTime">DateTime:日付時刻</param>
/// <returns>long日付時刻シリアル値</returns>
public static long chgDateTimeToSerial(DateTime strDateTime)
{
long lserial = strDateTime.ToBinary();
return lserial;
}
/// <summary>
/// long型のシリアル値をDateTime型に変換する。
/// </summary>
/// <param name="strDateTime">long:シリアル値</param>
/// <returns>DateTime:日付時刻</returns>
public static DateTime chgSerialToDateTime(long lserial)
{
DateTime ddatetime = DateTime.FromBinary(lserial);
return ddatetime;
}
メソッド一覧
DateTime chgDateTimeToSerial(DateTime strDateTime) | DateTime型をシリアル値に変換する。 |
long chgSerialToDateTime(long lserial) | long型シリアル値をDateTime型に変換する。 |
使用例
long sresult8 = chgDateTimeToSerial(DateTime.Now);
DateTime sresult9 = chgSerialToDateTime(sresult6);
Console.WriteLine(sresult8);
Console.WriteLine(sresult9);
-8586325643282421484
2019/09/21 14:09:17
DateTime型日時を加算と減算
/// <summary>
/// DateTime型の日付日時に対し指定した月分加算減算する。
/// </summary>
/// <param name="dt">DateTime:日時</param>
/// <param name="month">int:加算減算する月(ex:1,-1)</param>
/// <returns>DateTime:計算結果の日付時刻</returns>
public static DateTime AddDateTimeAddMonth(DateTime dt, int month)
{
DateTime ddatetime = dt.AddMonths(month);
return ddatetime;
}
/// <summary>
/// DateTime型の日付日時に対し指定した日付分加算減算する。
/// </summary>
/// <param name="dt">DateTime:日時</param>
/// <param name="strDateTime">int:日付分加算減算する日(ex:1,-1)</param>
/// <returns>DateTime:計算結果の日付時刻</returns>
public static DateTime AddDateTimeAddDay(DateTime dt, int day)
{
DateTime ddatetime = dt.AddDays(day);
return ddatetime;
}
/// <summary>
/// DateTime型の日付日時に対し指定した秒数分加算減算する。
/// </summary>
/// <param name="dt">DateTime:日時</param>
/// <param name="strDateTime">int:秒数加算減算する日(ex:1,-1)</param>
/// <returns>DateTime:計算結果の日付時刻</returns>
public static DateTime AddDateTimeAddSec(DateTime dt, int sec)
{
DateTime ddatetime = dt.AddSeconds(sec);
return ddatetime;
}
メソッド一覧
DateTime AddDateTimeAddMonth(DateTime dt, int month) | 入力した月分を加算減算する。 |
DateTime AddDateTimeAddDay(DateTime dt, int day) | 入力した日分を加算減算する。 |
DateTime AddDateTimeAddSec(DateTime dt, int sec) | 入力した秒分を加算減算する。 |
使用例
DateTime sresult10 = AddDateTimeAddMonth(DateTime.Now, 10); DateTime sresult11 = AddDateTimeAddDay(DateTime.Now, 10); DateTime sresult12 = AddDateTimeAddSec(DateTime.Now, 10); Console.WriteLine(DateTime.Now); Console.WriteLine(sresult10); Console.WriteLine(sresult11); Console.WriteLine(sresult12);
2019/09/21 14:00:00
2020/07/21 14:00:00
2019/10/01 14:00:00
2019/09/21 14:00:10
String型日時を加算と減算
/// <summary>
/// string型の日付日時に対し指定した月分加算減算する。
/// </summary>
/// <param name="strDateTime">string:日付</param>
/// <param name="month">int:加算減算する月(ex:1,-1)</param>
/// <returns>string:計算結果の日付時刻</returns>
public static string AddDateTimeAddMonth(string strDateTime, int month)
{
DateTime retDateTime;
if (!DateTime.TryParse(strDateTime, out retDateTime))
{
//変換不可
//MinValue = 0001/01/01 0:00:00
retDateTime = DateTime.MinValue;
}
else
{
retDateTime = retDateTime.AddMonths(month);
}
return retDateTime.ToString();
}
/// <summary>
/// string型の日付日時に対し指定した日付分加算減算する。
/// </summary>
/// <param name="strDateTime">string:日付</param>
/// <param name="day">int:日付加算減算する日(ex:1,-1)</param>
/// <returns>string:計算結果の日付時刻</returns>
public static string AddDateTimeAddDay(string strDateTime, int day)
{
DateTime retDateTime;
if (!DateTime.TryParse(strDateTime, out retDateTime))
{
//変換不可
//MinValue = 0001/01/01 0:00:00
retDateTime = DateTime.MinValue;
}
else
{
retDateTime = retDateTime.AddDays(day);
}
return retDateTime.ToString();
}
/// <summary>
/// string型の日付日時に対し指定した秒数分加算減算する。
/// </summary>
/// <param name="strDateTime">string:日付</param>
/// <param name="sec">int:秒数加算減算する日(ex:1,-1)</param>
/// <returns>string:計算結果の日付時刻</returns>
public static string AddDateTimeAddSec(string strDateTime, int sec)
{
DateTime retDateTime;
if (!DateTime.TryParse(strDateTime, out retDateTime))
{
//変換不可
//MinValue = 0001/01/01 0:00:00
retDateTime = DateTime.MinValue;
}
else
{
retDateTime = retDateTime.AddSeconds(sec);
}
return retDateTime.ToString();
}
メソッド一覧
string AddDateTimeAddMonth(stirng strDateTime, int month) | 入力した月分を加算減算する。 |
string AddDateTimeAddDay(string strDateTime, int day) | 入力した日分を加算減算する。 |
string AddDateTimeAddSec(string strDateTime, int sec) | 入力した秒分を加算減算する。 |
使用例
string sresult13 = AddDateTimeAddMonth("2019/09/21 13:00:00", 10); string sresult14 = AddDateTimeAddDay("2019/09/21 13:00:00", 10); string sresult15 = AddDateTimeAddSec("2019/09/21 13:00:00", 10); Console.WriteLine(sresult13); Console.WriteLine(sresult14); Console.WriteLine(sresult15);
2020/07/21 14:00:00
2019/10/01 14:00:00
2019/09/21 14:00:10
日付時刻から曜日を取得
/// <summary>
/// 日付時刻から曜日を取得する
/// </summary>
/// <param name="dt">DateTime:日付時刻</param>
/// <returns>string:曜日</returns>
public static string getDateTimeWeek(DateTime dt)
{
string syoubi = "";
int iweek = (int)dt.DayOfWeek;
switch (iweek)
{
case 0: ; syoubi = "日"; break;
case 1: ; syoubi = "月"; break;
case 2: ; syoubi = "火"; break;
case 3: ; syoubi = "水"; break;
case 4: ; syoubi = "木"; break;
case 5: ; syoubi = "金"; break;
case 6: ; syoubi = "土"; break;
}
return syoubi;
}
/// <summary>
/// String型日付時刻から曜日を取得する
/// </summary>
/// <param name="strDateTime">string:日付時刻</param>
/// <returns>string:曜日</returns>
public static string getDateTimeWeek(string strDateTime)
{
string syoubi = "";
DateTime retDateTime;
if (!DateTime.TryParse(strDateTime, out retDateTime))
{
//変換不可
//MinValue = 0001/01/01 0:00:00
retDateTime = DateTime.MinValue;
}
else
{
int iweek = (int)retDateTime.DayOfWeek;
switch (iweek)
{
case 0: ; syoubi = "日"; break;
case 1: ; syoubi = "月"; break;
case 2: ; syoubi = "火"; break;
case 3: ; syoubi = "水"; break;
case 4: ; syoubi = "木"; break;
case 5: ; syoubi = "金"; break;
case 6: ; syoubi = "土"; break;
}
}
return syoubi;
}
メソッド一覧
string getDateTimeWeek(DateTime dt) | DateTime型の日付より曜日を取得する。 |
string getDateTimeWeek(string strDateTime) | string型の日付より曜日を取得する。 |
使用例
string sresult16 = getDateTimeWeek(DateTime.Now); Console.WriteLine(DateTime.Now); Console.WriteLine(sresult16);
2019/09/21 14:00:00
土
DateTime型をフォーマット変換
/// <summary>
/// DateTime型からyyyyMMddHHmmssに変換する
/// </summary>
/// <param name="dt">DateTime:日付時刻</param>
/// <returns>string:yyyyMMddHHmmss</returns>
public static string chgDateTimeToyyyyMMddHHmmss(DateTime dt)
{
string sdatetime = dt.ToString("yyyyMMddHHmmss");
return sdatetime;
}
/// <summary>
/// DateTime型を指定フォーマットで変換する
/// </summary>
/// <param name="dt">DateTime:日付時刻</param>
/// <param name="sformat">string:フォーマット</param>
/// <returns>string:指定フォーマット</returns>
public static string chgDateTimeToStringformat(DateTime dt, string sformat)
{
//ex:input sformat = yyyy-MM-dd HH:mm:ss.fff;
//ex:input sformat = HH:mm:ss;
string sdatetime = dt.ToString(sformat);
return sdatetime;
}
メソッド一覧
string chgDateTimeToyyyyMMddHHmmss(DateTime dt) | DateTime型をyyyyMMddHHmmssに変換する。 |
string chgDateTimeToStringformat(DateTime dt, string sformat) | DateTime型を指定したフォーマットに変換する。 |
使用例
string sresult17 = chgDateTimeToyyyyMMddHHmmss(DateTime.Now); string sresult18 = chgDateTimeToStringformat(DateTime.Now, "yyyy/MM/dd HHmmss"); Console.WriteLine(sresult17); Console.WriteLine(sresult18);
20190921140000
2019/09/21 140000
フォーマット例 (2019/09/01 14:01:02.003での使用例)
yyyy/MM/dd | 2019/09/01 |
yyyy年MM月dd日 | 2019年09月01日 |
yyyyMMdd | 20190901 |
HH:mm:ss.fff | 14:01:02.003 |
tthh:mm:ss | 午後02:01:02 |
ddd | 土 |
dddd | 土曜日 |
yy | 19 |
yyyy | 2019 |
M | 9 |
MM | 09 |
d | 1 |
dd | 01 |
2つの日付の差の日を取得
/// <summary>
/// DateTime型の2つの日付の差の日を求める
/// </summary>
/// <param name="dt1">DateTime:日付時刻1</param>
/// <param name="dt2">DateTime:日付時刻2</param>
/// <returns>double:差の日数:</returns>
public static double calcDayDiffday(DateTime dt1, DateTime dt2)
{
double diffday = (dt2 - dt1).TotalDays;
return diffday;
}
/// <summary>
/// string型の2つの日付の差の日を求める
/// </summary>
/// <param name="dt1">string:日付時刻1</param>
/// <param name="dt2">string:日付時刻2</param>
/// <returns>double:差の日数:</returns>
public static double calcDayDiffday(string strDateTime1, string strDateTime2)
{
DateTime retDateTime1;
DateTime retDateTime2;
double ddiffday = 0;
if (!DateTime.TryParse(strDateTime1, out retDateTime1))
{
//変換不可 MinValue = 0001/01/01 0:00:00
retDateTime1 = DateTime.MinValue;
}
else
{
if (!DateTime.TryParse(strDateTime2, out retDateTime2))
{
//変換不可 MinValue = 0001/01/01 0:00:00
retDateTime2 = DateTime.MinValue;
}
else
{
ddiffday = (retDateTime2-retDateTime1).TotalDays;
}
}
return ddiffday;
}
メソッド一覧
double calcDayDiffday(DateTime dt1, DateTime dt2) | DateTime型の入力した日付の差の日を求める。 |
double calcDayDiffday(string strDateTime1, string strDateTime2) | string型の入力した日付の差の日を求める。 |
使用例
double sresult19 = calcDayDiffday(DateTime.Now, DateTime.Now);
double sresult20 = calcDayDiffday("2019/09/21 13:00:00", "2019/09/21 13:00:00");
Console.WriteLine(sresult19);
Console.WriteLine(sresult20);
0
1
コメント