답변:
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 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)));
}
}
}
Nobody seems to implemented an extension method
아마 필요하지 않기 때문에 ...
나는 다양한 방법으로 시도했다. 나를 위해 일한 것은 이것이었다 :
Convert.ToDateTime(data, CultureInfo.InvariantCulture);
data
나를 위해이 시간 9/24/2017 9:31:34 오전
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);
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););
DateTime은 프레임 워크에 내부적으로 숫자로 저장되는 객체라는 것을 기억할 가치가 있습니다. Format은 다시 문자열로 변환 할 때만 적용됩니다.
문자열을 내부 숫자 유형으로 변환 구문 분석
내부 숫자 값을 읽을 수있는 문자열로 변환 형식화
최근에 Linq에 전달하기 위해 DateTime을 변환하려고하는 문제가 있었는데, 당시 TimeTime을 Linq 쿼리에 전달할 때 형식이 관련이 없다는 사실을 깨닫지 못했습니다.
DateTime SearchDate = DateTime.Parse(searchDate);
applicationsUsages = applicationsUsages.Where(x => DbFunctions.TruncateTime(x.dateApplicationSelected) == SearchDate.Date);
입력 값이 확실하지 않으면 아래와 같이 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
}
이 코드를 정적 클래스에 넣습니다> 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('-', ':', '-');
방금 우아한 방법을 찾았습니다.
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"
세계의 다른 문화권은 다른 방식으로 날짜 문자열을 씁니다. 예를 들어, 미국에서 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);
String now = DateTime.Now.ToString("YYYY-MM-DD HH:MI:SS");//make it datetime
DateTime.Parse(now);
이건 너에게 준다
2019-08-17 11:14:49.000
빨리 하시겠습니까?
yyMMdd 형식의 날짜가 있다고 가정 해 봅시다.
내가 찾은 그것을 변환하는 가장 빠른 방법은 다음과 같습니다.
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')
선택한 날짜 형식에 따라 색인을 선택하십시오. 속도가 필요한 경우 기능의 '비 제네릭'방식을 신경 쓰지 않을 것입니다.
이 방법은 다음과 같은 시간이 소요됩니다.
var d = DateTime.ParseExact(s, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
@CMS
표시되지 않습니까? 이유가있을 수 있습니다-궁금합니다.