2015-06-21 5 views
7

Я хотел бы написать метод, который дает мне 3 буквы - представляющие день, месяц, год - из datetimeformat.DateTime получить буквы, представляющие день, месяц, год с текущей культуры

Так ан-американской культуры мои желаемые значения возврата будет (плюс сепаратор)

  • d
  • M
  • у
  • /

в де-DE тот же метод должен возвращаться

  • Т (Т аг = день)
  • М (М ОНАС = месяц)
  • J (J AHR = год)
  • . (Separator)

Я имел взгляд в форму DateTimeFormatInfo класса CurrentCulture, но смог найти только разделитель у вас есть какие-либо идеи, как я могу получить остальное?

var culture = Thread.CurrentThread.CurrentCulture; 
Console.WriteLine(culture.DateTimeFormat.DateSeparator); 

мне это нужно, потому что TEXT функция внутри Excel не принимает формат из InvariantCulture и только обрабатывает его от CurrentCulture.

Так что-то вроде этого не является действительным в немецкой версии Excel:

=TEXT(NOW();"dd.MM.yyyy") 

это должно быть установлено с

=TEXT(NOW();"TT.MM.JJJJ") 

(это не имеет значения, если его сделать с помощью VBA, его) Вы можете посмотреть следующее: http://www.rondebruin.nl/win/s9/win013.htm

Формат строки может быть любым, поскольку пользователь может вводить его так, как ему нравится и мне нужно перевести его в текущую культуру.

+0

какой формат строки вы используете? ключевые ценности не изменяются с культурой. –

+1

, которого нет в .net - возможно, вы могли написать что-то по своему усмотрению. –

+0

@ DanielA.White, как бы вы это сделали, с помощью простых манипуляций с строками и как бы выглядел бы этот метод, на какие свойства вы бы посмотрели, я действительно не знаю всех культур, где он может быть другим, и метод манипуляции строкой, который действителен для каждой культуры, и каждый пользователь мог бы изменить свои настройки на что-то совершенно случайное. –

ответ

2

Вы можете сделать это в VBA: DateTimeStrings вернет массив кодов дат и разделителя.

Option Explicit 
Function DateTimeStrings() As Variant 
    Dim s(3) 
    With Application 
     s(0) = .International(xlDayCode) 
     s(1) = .International(xlMonthCode) 
     s(2) = .International(xlYearCode) 
     s(3) = .International(xlDateSeparator) 
    End With 

DateTimeStrings = s 

Debug.Print s(0), s(1), s(2), s(3) 

End Function 

EDIT: Я не знаю, как вы хотите использовать это, но, например, чтобы вставить формулу аналогично тому, что у вас есть выше, (например: =TEXT(A1,"dd/mm/yyy") в B1 и на соответствующем языке , вы можете выбрать A1 и запустить следующий макрос:

==================================================================================================================================== ==========

Sub AddTextFunction() 
    Dim R As Range, C As Range 
    Dim sFormula As String 
    Dim V As Variant 
    Dim D As String, M As String, Y As String, sep As String 

Set R = Selection 

For Each C In R 
    V = DateTimeStrings() 
     D = V(0) 
     M = V(1) 
     Y = V(2) 
     sep = V(3) 

    sFormula = "=text(RC[-1],""" & D & D & sep & M & M & sep & Y & Y & Y & """)" 
    C.Offset(0, 1).FormulaR1C1 = sFormula 
Next C 

End Sub 

================================= ==================

+0

Очень приятно. Я не знал о собственности «International» и даже менее осознавал, как это может быть полезно. –

Смежные вопросы