Excel, 212 바이트
=ABS(RIGHT(A1,2))&IF(ABS(ABS(RIGHT(A1,2))-12)<2,"th",SWITCH(RIGHT(A1,1),"1","st","2","nd","3","rd","th"))&TEXT(MID(A1,FIND("-",A1)+1,FIND("-",REPLACE(A1,1,FIND("-",A1),""))-1)*30," mmmm ")&LEFT(A1,FIND("-",A1)-1)
모든 앰퍼샌드에서 덩어리로 나누면 다음과 같은 조각이 나타납니다.
ABS()
문자열의 마지막 두 문자에서 요일 번호를 가져옵니다. 하이픈이 포함될 수 있으므로 하이픈 ABS
을 양수로 변환합니다.
IF((ABS-12)<2,"th",SWITCH())
서수를 추가합니다. -12
11, 12, 13는 일반 규칙을 따르지 않는 그들은 모두 얻을 수 있기 때문에 비트는 th
대신 st
, nd
하고 rd
. 이 문제가 해결되었습니다.
- 참고 :이
SWITCH
기능은 Excel 2016 이상에서만 사용할 수 있습니다. ( Source ) CHOOSE
일치하지 않는 경우 값을 반환 할 수 있지만 CHOOSE
숫자 입력이 필요하고 가능한 각 값에 해당하는 반환 값이 있어야하므로이 경우 보다 짧습니다 .
TEXT(MID()*30," mmmm ")
월 이름을 추출합니다. MID()
월 숫자를 문자열로 가져오고 30을 곱하면 숫자가 반환됩니다. Excel에서 날짜로 그 숫자를보고 (1900년 1월 30일, 1900년 2월 29일, 1900년 3월 30일 등) 및 TEXT()
양쪽에 공간이 한 달에 이름과 형식을. 28과 29도 작동하지만 30은 "더욱 깔끔해 보인다".
LEFT()
연도 번호를 추출합니다.
이제 모든 경우에 테스트 사례가 Excel에서 실제 날짜로 처리 할 수있는 날짜 범위 (1900-01-01 ~ 9999-12-31)에 있으면 훨씬 쉬웠을 것입니다. 가장 큰 장점은 전체 날짜가 한 번에 형식화된다는 것입니다. 그 해결책은 133 바이트입니다 .
=TEXT(DATEVALUE(A1),"d""" & IF(ABS(ABS(RIGHT(A1,2))-12)<2,"th",SWITCH(RIGHT(A1,1),"1","st","2","nd","3","rd","th")) & """ mmmm yyyy")
다른 큰 장애물은 서수를 포함해야했습니다. 그것 없이는 해결책은 단지 34 바이트입니다 .
=TEXT(DATEVALUE(A1),"d mmmm yyyy")
03rd
대신 일명3rd