2014-04-10 4 views
0

프로젝트 코드에서 NodaTime을 사용하고 있습니다. LocalDateTime을 값으로 가져오고 datetime 필드로 MySQL 데이터베이스에 삽입하기 위해 형식을 변경해야합니다.C# NodaTime 날짜 형식을 yyyy-MM-dd로 변경하십시오. HH : mm : ss

나는 OffSetPattern을 사용하여 어떤 것을 보았지만 그것을 사용하는 방법을 모르고있다.

여기 내가 db에 쓰려고합니다.

public void SetDataLog(Controller controllerInfo, LocalDateTime time, string count) 
{ 
    var count2 = Convert.ToInt32(count); 

    var sql = "INSERT INTO controller_activation_log (controller_id, activations, date_created, date_created_timezone) VALUES(" + controllerInfo.controllerId + ", " + count2 + ", \'" + time + "\', \'UTC\')"; 
      mysqldb.Write(sql); 
} 

LocalDateTime 형식은 내가 문자열로 2014년 4월 10일 10시 45분 2초 할 필요 2014년 4월 10일 10시 45분 2초 (예) 로 나온다.

문자열을 시도했지만이 경우에는 효과가 없습니다. 패턴을 만들고 파싱하는 것에 대해 뭔가를 보았습니다. 그러나 NodaTime의 어디에도 보이지 않기 때문에 어떻게해야하는지 이해하지 못합니다. ?? NodaTime과 C#에 익숙하지 않으므로 어쩌면 상대적으로 간단한 것을 놓치고있을 수도 있습니다. 누구든지 내가 원하는 형식을 얻는 것을 도울 수 있습니까?

datetimeObj.ToString("s").Replace("T"," ") 

하거나 정규식 수행 할 수 있습니다 :

답변

-2

이 작업을 수행 할 수

Regex.Replace("04/10/2014 10:45:02",@"(\d+)/(\d+)/(\d+)\s(\d+):(\d+):(\d+)","$3-$1-$2 $4:$5:$6"); 

은 또한 당신이 .ToString("yyyy-MM-dd HH:mm:ss")

+0

나는 toString 메소드에 대한 오버로드 1 개 인자를하지 얻고 사용할 수 있습니다. – Chris

+0

다음은 코드 번호입니다. – Chris

+0

Dolt. hit : LocalDateTime newTime = time.ToString ("s"). Replace ("T", ""); – Chris

2

것은 당신이 LocalDateTime 단지 필요로 작업하는 경우를 할 수 있습니다 특정 방식으로 문자열 형식을 지정하려면 다음과 같이하십시오.

string s = time.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); 

형식 제공자를 전달해야하며, 경우에 따라 CultureInfo.InvariantCulture이어야합니다.

그러나 이 아니어야합니다.은 날짜를 문자열로 전달하거나 문자열 매개 변수를 삽입하여 SQL 문을 작성해야합니다. 검색어를 매개 변수화하고 적절한 데이터 유형을 사용하십시오!

MySQL에서는 DATETIME 유형 (NodaTime LocalDateTime 저장 용)을 사용해야합니다. 다른 날짜/시간 데이터 유형은 the MySQL docs을 참조하십시오.

또한 노다 시간 유형을 이해하지 못할 MySQL 클라이언트 라이브러리로, 당신의 매개 변수에 전달할 때 .ToDateTimeUnspecified()를 호출 할 필요가 있지만, DateTime을 이해할 것이다.

MySqlCommand cmd = new MySqlCommand(); 
cmd.Connection = yourConnection; 
cmd.CommandText = yourSQLString; // use parameter placeholders like "@time" 
cmd.Prepare(); 

cmd.Parameters.AddWithValue("@time", time.ToDateTimeUnspecified()); 
// and the rest of your parameters... 

cmd.Parameters.ExecuteNonQuery(); 

또한, 당신이 LocalDateTime 시작하여 SQL 문에 시간대로 'UTC'를 하드 코딩으로 매우 이상하다. UTC를 쓰고 있다면 아마도 Instant으로 시작해야합니다.

0

또는 당신은 단순히이

String date = mydate.ToString("u", CultureInfo.InvariantCulture); 
date=date.Substring(0,date.Length-1);