DateTime从当前文化中获取代表日,月,年的字母

Ran*_*dom 7 c# globalization excel cultureinfo

我想写一个方法,从datetimeformat给我3个字母 - 代表日,月,年.

所以在en-US文化中我想要的返回值是(加上分隔符)

  • d
  • 中号
  • ÿ
  • /

在de-DE中应该返回相同的方法

  • T(T ag =天)
  • M(M onat =月)
  • J(J ahr =年)
  • .(分隔器)

我查看了DateTimeFormatInfo类表单CurrentCulture,但只能找到分隔符你知道我怎么能得到其余的吗?

var culture = Thread.CurrentThread.CurrentCulture;
Console.WriteLine(culture.DateTimeFormat.DateSeparator);
Run Code Online (Sandbox Code Playgroud)

我需要这个,因为Excel中的TEXT函数不接受来自InvariantCulture的格式,只能从当前文化中处理它.

所以这样的东西在德语Excel版本中无效:

=TEXT(NOW();"dd.MM.yyyy")
Run Code Online (Sandbox Code Playgroud)

这需要设置

=TEXT(NOW();"TT.MM.JJJJ")
Run Code Online (Sandbox Code Playgroud)

(如果用VBA完成它并不重要,它不会被翻译)你可以看看下面的http://www.rondebruin.nl/win/s9/win013.htm

字符串格式可以是任何东西,因为用户可以按照他的喜好输入它,我需要将其翻译成当前的文化.

Ron*_*eld 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
Run Code Online (Sandbox Code Playgroud)

编辑: 我不确定您想如何使用它,但是,例如,插入与上面类似的公式(例如: =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
Run Code Online (Sandbox Code Playgroud)

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