2013-06-27 3 views
2

하나의 큰 트랜잭션으로 여러 동작을 처리하는 오케스트레이션 클래스를 설정하고 있습니다. 이러한 각각의 트랜잭션에 대해 나는 오케스트레이션 시작시에 인스턴스화 된 것과 동일한 타임 스탬프를 제공합니다.후미 0을 제거하려면 datetime 서식 지정 방법

I 사용자가 다음 줄

var transactionTimestamp = DateTime.UtcNow.ToString("o"); 

나는 타임 스탬프는 후행 0을 가질 수 있음을 규정하는 시스템의 제약이있다. 예를 들어

:

2013-06-26T19:51:38.0083980Z //bad 
2013-06-26T19:51:38.008398Z //good 
2013-06-26T19:51:38.0083988Z //good 
+3

변환 된 'DateTime'에 RegEx를 사용해야합니다. 잠재적 인 부작용이없는 후행 0을 제거하는 dt 형식 지정자가 있다고는 생각하지 않습니다. – evanmcdonnal

답변

6

내장 datetime 형식 "O"의 지정 형식에 필적 "YYYY '-'MM '-'dd'T'HH ''mm ' : 'ss'. 'fffffffK'. 그 형식을 사용하고 있지만 소문자 f를 대문자 f로 바꾸면 뒤 따르는 0이 없습니다.

DateTime.UtcNow.ToString ("YYYY '-'MM '-'dd'T'HH ':'mm ':' '.'SS FFFFFFFK");

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

3

당신은 비교적 쉽게 Regex를 사용하여이 작업을 수행 할 수 있습니다. 한 가지 방법이 있습니다.

string result = Regex.Replace("2013-06-26T19:51:38.0083980Z", "0+Z$", "Z"); 
// result == "2013-06-26T19:51:38.008398Z" 

string result2 = Regex.Replace("2013-06-26T19:51:38.0083988Z", "0+Z$", "Z") 
// result2 == "2013-06-26T19:51:38.0083988Z" 
1

나는 다음과 같은 도움말을 작성합니다.

public string GetDtString(DateTime dt) 
{ 
    RegEx rgx = new RegEx("[1-9]0+Z\b"); 
    return rgx.Replace(dt.ToString("o"), System.String.Empty); 
} 

그것은 기본적으로 그냥 모든 0의 숫자 1-9 후 빈 문자열 Z\b (단어 경계 다음에 Z) 이전에 발생하는과 DT의 문자열을 반환합니다.