2010-06-16 15 views
5

요일을 2 자로 변환하는 DateTimeFormatInfo 형식 패턴이 있습니까? 예를 들어 화요일은 화요일이되고 수요일은 우리가됩니다. 형식 문자열은 날짜 형식의 경우 DateTimeFormatInfo을 준수해야합니다.요일의 DateTimeFormatInfo 문자열 형식입니다. 목요일이 Th가됩니다

추가 :

은 아마 사용자 정의 형식을 포함 DateTimeFormatInfo을 확장 할 수있는 솔루션을 찾고 있어요?

+0

AbbreviatedDayNames의 내 게시물을 확인하십시오. – code4life

답변

15

당신이 얻을 수있는 마감은 "ddd"custom format specifier입니다. 이것은 세 글자로 된 약어를 ​​생성하므로 정확하게 원하는 것은 아닙니다. 당신이 원하는 것을 정확하게하는 것은 없습니다.

당신은 항상의 처음 두 문자를 취할 수 있습니다 : 그것은 sealed로 선언되어 있기 때문에

DateTime.Now.ToString("ddd").Substring(0,2); 

불행하게도 당신이 DateTimeFormatInfo을 확장 할 수 없습니다.

+0

사용중인 구성 요소가 형식 패턴을 예상하고 있습니다. –

+0

@Tony_Henrich - "ddd"_ datetimes의 형식 패턴입니다. – Oded

+0

알아 두지 만 내가 원하는 것처럼 그것은 두 인물이 아니다. –

1

그것이 FormatPattern 할 필요가있는 경우
string s = DateVar.ToString("ddd").SubString(0,2); 

,이 시도하려고 :

var dtFI = new CultureInfo("en-US", false).DateTimeFormat; 
dtFI.DayNames = new[] {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su" }; 
string s = DateVar.ToString("ddd", dtFI); 
+0

형식 패턴이어야합니다. –

1

특별히 DateTimeFormatInfo를 사용하려면 수 그러나 "DDD"

dtfi.GetShortestDayName(DateTime.Now.DayOfWeek); 

문자열 형식에 가장 근접한 문자입니다.

4

작업하려는 문화권의 DateTimeFormatInfo을 가져온 다음 AbbreviatedDayNames이라는 문자열 배열을 수정해야합니다. 그 후에 dddTh을 반환합니다.

http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.abbreviateddaynames(VS.71).aspx


가져 DateTimeFormatInfo.AbbreviatedDayNames 또는 주 일의 배양 특정 약어 이름을 포함하는 입력 문자열의 1 차원 배열 를 설정한다.

class Program 
{ 
    static void Main() 
    { 
     var dtInfo = new System.Globalization.DateTimeFormatInfo();    
     Console.WriteLine("Old array of abbreviated dates:"); 
     var dt = DateTime.Today; 
     for (int i = 0; i < 7; i++) 
     { 
      Console.WriteLine(dt.AddDays(i).ToString("ddd", dtInfo)); 
     } 

     // change the short weekday names array 
     var newWeekDays = 
      new string[] { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa" }; 
     dtInfo.AbbreviatedDayNames = newWeekDays; 

     Console.WriteLine("New array of abbreviated dates:"); 
     for (int i = 0; i < 7; i++) 
     { 
      Console.WriteLine(dt.AddDays(i).ToString("ddd", dtInfo)); 
     } 

     Console.ReadLine(); 
    } 
} 

하나 더 참고 : 당신이 IFormatProvider를 제공하는 것을 제한하는 경우 물론, 당신은 현재의 thread의 CultureInfo을 대체 할 수 있습니다, 예를 들어 여기에

그것을 수행하는 방법의 예입니다 : CurrentCulture에

CultureInfo customCulture = CultureInfo.CreateSpecificCulture("en-US"); 
// ... set up the DateTimeFormatInfo, etc... 

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture; 




더 :

http://msdn.microsoft.com/en-us/library/system.threading.thread.currentuiculture.aspx

Thread.CurrentUICulture 재산권
가져 런타임에 문화권 별 자원을 찾기 위해 자원 관리자에 의해 사용되는 현재 문화권을 설정합니다.

+0

나는 이것을 언급하는 것을 잊어 버렸지 만, 당신이 DateTimeInfo의 새로운 인스턴스를 만들 때마다, 그 인스턴스는 불변의 문화권에서 만들어 졌으므로 이것을 명심하십시오. 물론 DateTimeInfo를 완전히 커스터마이징하려고한다면 이것은 논점이됩니다. – code4life

+0

dt.AddDays (i) .ToString ("ddd", dtInfo)은 더 이상 사용되지 않습니다. dtInfo.GetDayName (dt.DayOfWeek)이 작동해야합니다. – Joshcodes

+0

@Joshcodes : "Th"가 아니라 "Thursday"가 나옵니다. 여기서 내가하는 일은 기본 단축 된 요일 이름을 대체 한 다음 호출하는 것입니다. 당신이하고있는 일은 생략되지 않은 전체 요일 이름을 사용하고 있습니다. – code4life