bestsource

문자열을 날짜 시간으로 변환

bestsource 2023. 4. 9. 21:49
반응형

문자열을 날짜 시간으로 변환

은 어떻게 합니까?2009-05-08 14:40:52,531DateTime

24시간 베이스의 시간을 처리하고 있고, 초수를 콤마로 구분하고 있기 때문에, 커스텀 형식을 지정하는 것을 추천합니다.

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

여기에는 기본적으로 두 가지 옵션이 있습니다. DateTime.Parse() ★★★★★★★★★★★★★★★★★」DateTime.ParseExact().

첫 번째는 구문 면에서 매우 관대하며 다양한 형식의 날짜를 구문 분석합니다.이것은 다른 형식으로 제공되는 사용자 입력에 적합합니다.

ParseExact를 사용하면 해석에 사용할 날짜 문자열의 정확한 형식을 지정할 수 있습니다.문자열이 항상 같은 형식일 경우 이 형식을 사용하는 것이 좋습니다.이렇게 하면 기대 데이터로부터의 편차를 쉽게 탐지할 수 있습니다.

다음과 같이 사용자 입력을 해석할 수 있습니다.

DateTime enteredDate = DateTime.Parse(enteredString);

문자열에 특정 형식이 있는 경우 다른 방법을 사용해야 합니다.

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

"d"는 짧은 날짜 패턴을 나타냅니다(자세한 내용은 MSDN 참조).null, 의 에 현재의 하는 것을 지정합니다.

이거 먹어봐

DateTime myDate = DateTime.Parse(dateString);

더 좋은 방법은 다음과 같습니다.

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

사용방법:

DateTime dateTime = DateTime.Parse(dateTimeStr);

아무도 확장 방식을 구현하지 않은 것 같습니다.@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)));
        }
    }
}

나는 여러 가지 방법을 시도했다.나에게 효과가 있었던 것은, 다음과 같다.

Convert.ToDateTime(data, CultureInfo.InvariantCulture);

data에게 있어 이 오전 2017년 9월 24일 오전 9시 31분 34초였습니다.

아래를 시험해 보십시오.strDate는 'MM/dd/yyy' 형식의 날짜입니다.

var date = DateTime.Parse(strDate,new CultureInfo("en-US", true))

변환하다.ToDateTime 또는 DateTime.해석

날짜 시간해석

구문:

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););
  • 값: 날짜와 시간을 문자열로 나타냅니다.
  • 공급자: 문화별 정보를 제공하는 개체입니다.
  • 스타일: 일부 날짜 및 시간 구문 분석 메서드에 대해 문자열 구문 분석을 사용자 지정하는 형식 지정 옵션입니다.예를 들어 [Allow](허용)WhiteSpaces는 문자열에 있는 모든 공간을 구문 분석하는 동안 무시하는 데 도움이 되는 값입니다.

또한 Date Time은 프레임워크에 내부적으로 숫자로 저장되는 개체이며 포맷은 다시 문자열로 변환할 때만 적용됩니다.

  • 문자열을 내부 번호 유형으로 변환하는 구문 분석.

  • 내부 숫자 값을 읽을 수 있는 문자열로 변환하는 형식입니다.

최근 Linq에 전달하기 위해 DateTime을 변환하는 데 문제가 있었습니다.그 당시에는 DateTime을 Linq Query로 전달할 때 포맷이 중요하지 않다는 것을 깨닫지 못했습니다.

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

전체 날짜 문서

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);

Date Time을 사용할 수도 있습니다.입력값을 모를 경우 다음과 같이 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
}

방금 우아한 방법을 찾았어요

Convert.ChangeType("2020-12-31", typeof(DateTime));

Convert.ChangeType("2020/12/31", typeof(DateTime));

Convert.ChangeType("2020-01-01 16:00:30", typeof(DateTime));

Convert.ChangeType("2020/12/31 16:00:30", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("en-GB"));

Convert.ChangeType("11/شعبان/1437", typeof(DateTime), System.Globalization.CultureInfo.GetCultureInfo("ar-SA"));

Convert.ChangeType("2020-02-11T16:54:51.466+03:00", typeof(DateTime)); // format: "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffzzz"

이 코드를 정적 클래스에 넣습니다.> 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('-', ':', '-');
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);

이것은 너에게 준다

2019-08-17 11:14:49.000

세계의 다른 문화들은 다른 방식으로 날짜 문자열을 씁니다.예를 들어 미국에서는 2008년 1월 20일이 2008년 1월 20일입니다.프랑스에서는 Invalid Format Exception이 느려집니다.왜냐하면 프랑스는 날짜를 일/월/년으로, 미국에서는 월/일/년으로 읽기 때문이다.

따라서 20/01/2008과 같은 문자열은 프랑스에서 2008년1월 20일로 해석되고 미국에서는 Invalid Format Exception이 느려집니다.

현재 문화 설정을 확인하려면 시스템을 사용할 수 있습니다.세계화Culture Info.Current Culture(현재의 문화)

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);  

이 방법은 효과가 있었습니다.

CultureInfo provider = CultureInfo.InvariantCulture;
DateTime dt = DateTime.ParseExact("2009-05-08 14:40:52,531","yyyy-MM-dd HH:mm:ss,fff", provider);

빨리 해드릴까요?

예를 들어 yyMMd 형식의 데이트가 있다고 합시다.

제가 찾은 가장 빠른 변환 방법은 다음과 같습니다.

var d = new DateTime(
(s[0] - '0') * 10 + s[1] - '0' + 2000, 
(s[2] - '0') * 10 + s[3] - '0', 
(s[4] - '0') * 10 + s[5] - '0')

선택한 날짜 형식에 따라 인덱스를 선택합니다.속도가 필요한 경우 '일반적이지 않은' 기능 방식을 신경 쓰지 않을 수 있습니다.

이 방법에는 다음 작업에 필요한 시간의 약 10%가 소요됩니다.

var d = DateTime.ParseExact(s, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);

언급URL : https://stackoverflow.com/questions/919244/converting-a-string-to-datetime

반응형