web-dev-qa-db-ja.com

文字列をDateTimeに変換する

どのようにして2009-05-08 14:40:52,531のような文字列をDateTimeに変換しますか?

509
dban

24時間制であり、秒の端数を区切るカンマがあるため、カスタム形式を指定することをお勧めします。

DateTime myDate = DateTime.ParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff",
                                       System.Globalization.CultureInfo.InvariantCulture);
682
CMS

これには基本的に2つの選択肢があります。 DateTime.Parse()DateTime.ParseExact()

1つ目は、構文に関して非常に寛容であり、さまざまな形式で日付を解析します。さまざまな形式のユーザー入力に適しています。

ParseExactを使用すると、解析に使用する日付文字列の正確な形式を指定できます。あなたの文字列が常に同じフォーマットであるなら、これを使うのは良いことです。これにより、予想されるデータからの逸脱を簡単に検出できます。

このようにユーザー入力を解析できます。

DateTime enteredDate = DateTime.Parse(enteredString);

文字列に特定の形式がある場合は、他の方法を使用する必要があります。

DateTime loadedDate = DateTime.ParseExact(loadedString, "d", null);

"d"は短い日付パターンを表し(詳細は MSDNを参照 )、nullは現在のカルチャを文字列の解析に使用するように指定します。

227
Sander

これを試して

DateTime myDate = DateTime.Parse(dateString);

より良い方法はこれでしょう:

DateTime myDate;
if (!DateTime.TryParse(dateString, out myDate))
{
    // handle parse failure
}
114
gehsekky

誰も拡張メソッドを実装していないようです。 @ CMSの答え :の助けを借りて

実用的で改善されたフルソースの例はここにあります: Gist Link

namespace ExtensionMethods {
    using System;
    using System.Globalization;

    public static class DateTimeExtensions {
        public static DateTime ToDateTime(this string s, 
                  string format = "ddMMyyyy", string cultureString = "tr-TR") {
            try {
                var r = DateTime.ParseExact(
                    s: s,
                    format: format,
                    provider: CultureInfo.GetCultureInfo(cultureString));
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }
        }

        public static DateTime ToDateTime(this string s, 
                    string format, CultureInfo culture) {
            try {
                var r = DateTime.ParseExact(s: s, format: format, 
                                        provider: culture);
                return r;
            } catch (FormatException) {
                throw;
            } catch (CultureNotFoundException) {
                throw; // Given Culture is not supported culture
            }

        }

    }
}

namespace SO {
    using ExtensionMethods;
    using System;
    using System.Globalization;

    class Program {
        static void Main(string[] args) {
            var mydate = "29021996";
            var date = mydate.ToDateTime(format: "ddMMyyyy"); // {29.02.1996 00:00:00}

            mydate = "2016 3";
            date = mydate.ToDateTime("yyyy M"); // {01.03.2016 00:00:00}

            mydate = "2016 12";
            date = mydate.ToDateTime("yyyy d"); // {12.01.2016 00:00:00}

            mydate = "2016/31/05 13:33";
            date = mydate.ToDateTime("yyyy/d/M HH:mm"); // {31.05.2016 13:33:00}

            mydate = "2016/31 Ocak";
            date = mydate.ToDateTime("yyyy/d MMMM"); // {31.01.2016 00:00:00}

            mydate = "2016/31 January";
            date = mydate.ToDateTime("yyyy/d MMMM", cultureString: "en-US"); 
            // {31.01.2016 00:00:00}

            mydate = "11/شعبان/1437";
            date = mydate.ToDateTime(
                culture: CultureInfo.GetCultureInfo("ar-SA"),
                format: "dd/MMMM/yyyy"); 
         // Weird :) I supposed dd/yyyy/MMMM but that did not work !?$^&*

            System.Diagnostics.Debug.Assert(
               date.Equals(new DateTime(year: 2016, month: 5, day: 18)));
        }
    }
}
25
guneysus

dateTime.Parse(string)を使用してください。

DateTime dateTime= DateTime.Parse(dateTimeStr);
23
Amir Twito

以下を試してください。ここで、strDateは 'MM/dd/yyyy'形式の日付です。

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))
19
Krishna
19
lc.
string input;
DateTime db;
Console.WriteLine("Enter Date in this Format(YYYY-MM-DD): ");
input = Console.ReadLine();
db = Convert.ToDateTime(input);

//////// this methods convert string value to datetime
///////// in order to print date

Console.WriteLine("{0}-{1}-{2}",db.Year,db.Month,db.Day);
15
Umair Baig

いろいろ試しました。私のために働いたのはこれでした:

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

私にとってのdataは、このような時代でした。9/24/2017 9:31:34 AM

15
zeilja

入力値がわからない場合は、以下のようにDateTime.TryParseExact()を使用することもできます。

DateTime outputDateTimeValue;
if (DateTime.TryParseExact("2009-05-08 14:40:52,531", "yyyy-MM-dd HH:mm:ss,fff", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out outputDateTimeValue))
{
    return outputDateTimeValue;
}
else
{
    // Handle the fact that parse did not succeed
}
14
dev.bv

DateTime.Parse

構文:

DateTime.Parse(String value)
DateTime.Parse(String value, IFormatProvider provider)
DateTime.Parse(String value, IFormatProvider provider, DateTypeStyles styles)

例:

string value = "1 January 2019";
CultureInfo provider = new CultureInfo("en-GB");
DateTime.Parse(value, provider, DateTimeStyles.NoCurrentDateDefault););
  • 値:日付と時刻の文字列表現.
  • プロバイダ:カルチャ固有の情報を提供するオブジェクト。
  • スタイル:日付と時刻の解析方法のために文字列解析をカスタマイズするフォーマットオプション。たとえば、AllowWhiteSpacesは、解析中にstringに存在するすべてのスペースを無視するのに役立つ値です。

また、DateTimeはフレームワークの内部で数値として格納されているオブジェクトであることを覚えておく価値があります。Formatは、それを文字列に変換して戻すときにのみ適用されます。

  • 文字列を内部数値型に変換する解析。

  • 内部数値を読み取り可能な文字列に変換するフォーマット.

私は最近DateTimeをLinqに渡すように変換しようとしていて、DateTimeをLinq Queryに渡すときに形式が無関係であることに気付いていなかったことが問題になりました。

DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);

完全なDateTimeドキュメント

4
Mr.B

このコードを静的クラスに入れてください > public static class ClassName{ }

public static DateTime ToDateTime(this string datetime, char dateSpliter = '-', char timeSpliter = ':', char millisecondSpliter = ',')
{
   try
   {
      datetime = datetime.Trim();
      datetime = datetime.Replace("  ", " ");
      string[] body = datetime.Split(' ');
      string[] date = body[0].Split(dateSpliter);
      int year = date[0].ToInt();
      int month = date[1].ToInt();
      int day = date[2].ToInt();
      int hour = 0, minute = 0, second = 0, millisecond = 0;
      if (body.Length == 2)
      {
         string[] tpart = body[1].Split(millisecondSpliter);
         string[] time = tpart[0].Split(timeSpliter);
         hour = time[0].ToInt();
         minute = time[1].ToInt();
         if (time.Length == 3) second = time[2].ToInt();
         if (tpart.Length == 2) millisecond = tpart[1].ToInt();
      }
      return new DateTime(year, month, day, hour, minute, second, millisecond);
   }
   catch
   {
      return new DateTime();
   }
}

このように、あなたは使うことができます

string datetime = "2009-05-08 14:40:52,531";
DateTime dt0 = datetime.TToDateTime();

DateTime dt1 = "2009-05-08 14:40:52,531".ToDateTime();
DateTime dt5 = "2009-05-08".ToDateTime();
DateTime dt2 = "2009/05/08 14:40:52".ToDateTime('/');
DateTime dt3 = "2009/05/08 14.40".ToDateTime('/', '.');
DateTime dt4 = "2009-05-08 14:40-531".ToDateTime('-', ':', '-');
2
M.R.T2017

世界の異なる文化は異なる方法で日付文字列を書きます。たとえば、米国では2008年1月20日が2008年1月20日です。フランスでは、これはInvalidFormatExceptionをスローします。これは、フランスでは日時を日/月/年と読み、米国では月/日/年であるためです。

その結果、2008年1月20日のような文字列は、フランスでは2008年1月20日に解析され、米国ではInvalidFormatExceptionがスローされます。

現在のカルチャ設定を確認するには、System.Globalization.CultureInfo.CurrentCultureを使用できます。

string dateTime = "01/08/2008 14:50:50.42";  
        DateTime dt = Convert.ToDateTime(dateTime);  
        Console.WriteLine("Year: {0}, Month: {1}, Day: {2}, Hour: {3}, Minute: {4}, Second: {5}, Millisecond: {6}",  
                          dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond);  
1
Saeed Dini
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);

これはあなたに与えます

2019-08-17 11:14:49.000
0