2015-06-21 27 views
7

我想寫一個方法,它可以從日期時間格式中爲我提供3個字母 - 表示日,月,年。DateTime從當前文化中獲取表示日,月,年的字母

所以在EN-US區域性我想要的返回值是(加上分隔符)

  • d
  • 中號
  • Ÿ
  • /

在DE-DE同樣的方法應該返回

  • T(Ť AG =天)
  • M(中號 onat =月)
  • Ĵ(Ĵ AHR =年)
  • 。 (隔膜)

我看看到DateTimeFormatInfo類形式CurrentCulture,但只能找到分離器,你有什麼想法,我怎麼能得到休息嗎?

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

我需要這個,因爲裏面的ExcelTEXT函數不接受來自InvariantCulture的格式只有從的CurrentCulture處理它。

所以這樣的事情是不是在德國的Excel版本有效:

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

這需要與

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

(如果用VBA做也沒關係,把它設置沒有得到翻譯) 你可以看看下面的http://www.rondebruin.nl/win/s9/win013.htm

字符串格式可以是任何東西,因爲用戶可以輸入它,因爲他喜歡我需要把它翻譯成現在的文化。

+0

你使用哪種格式的字符串?關鍵的價值觀不會隨着文化而改變。在.net中不存在的 –

+1

- 也許你可以自己寫一些東西。 –

+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 

編輯:我不知道你想怎麼用這個,但是,例如,插入類似一個公式來你有什麼上面,(如:在B1,並在適當的語言=TEXT(A1,"dd/mm/yyy") ,您可以選擇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

非常好。我並不知道這個'國際'的財產,更不知道它是如何有用的。 –

相關問題