2014年07月27日

C#で文字列型日時のN秒後時間取得

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その28

■問題 (出題者:raynstard)
日時を表す文字列と時間(秒)を受け取り
指定された日時からN秒となる日時を出力する関数 DateEx() を作成してください。

関数の仕様は次の通りです。
1. 入力となる日時の書式は任意である。
    → プログラムの都合に合わせてよい。
2. 入力となる時間(秒)は、負の値も許容すること。
    また、負の値が指定された場合、指定の日時よりも前の日時を出力すること
3. 出力する日時は入力の日時と同じ書式をとる文字列であること
4. 出力する日時は正規化されていること
5. 出力先は標準出力、または、バッファのいずれでもよい。

たとえば、DateEx("20080827235925",40)ならば
出力は
「20080828000005」です。

余力があれば時間を省略可能とし、省略された場合は「現在時刻」を利用するように
してみてください。

入力となる日時の書式は、yyyy/MM/dd HH:mm:ss とします。 DateTime.Parse使ってるので、DateTime.Parse が受け付ける書式なら何でも良いのですが、 出力はひとつに固定です。
そういう意味では、3を満足していないともいえますが、まあ、そこはご愛嬌ということで...

正規表現使って、日時を取り出し、それを DateTime型に変換するという方法もあるとおもいますが、 それだと、めんどうなので、素直に、DateTime.Parse 使いました。
入力書式があってるのが前提条件です。

■C#で書いたコード
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Doukaku.Org {

    class Program {
        static void Main(string[] args) {
            Console.WriteLine(DateEx("2008/08/27 23:59:25", 40));
            Console.WriteLine(DateEx("", 40));
        }

        static string DateEx(string date, int n) {
            DateTime dt = string.IsNullOrEmpty(date) ? DateTime.Now : DateTime.Parse(date);
            DateTime dt2 =  dt.AddSeconds(n);
            return string.Format("{0:yyyy/MM/dd HH:mm:ss}", dt2);
        }
    }
}


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52378818