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

因此,在美国文化中,我期望的返回值为(加上分隔符)

  • d
  • M
  • /

  • 在de-DE中,应返回相同的方法
  • T( T ag =天)
  • M( M onat =月)
  • J( J ahr =年)
  • 。 (分隔符)

  • 我查看了DateTimeFormatInfo类形式的CurrentCulture,但只能找到分隔符,您对我如何获得其余部分一无所知吗?
    var culture = Thread.CurrentThread.CurrentCulture;
    Console.WriteLine(culture.DateTimeFormat.DateSeparator);
    

    我之所以需要这样做,是因为 Excel 中的 TEXT 函数不接受InvariantCulture的格式,而仅从当前区域性处理它。

    因此,类似这样的内容在德语Excel版本中无效:
    =TEXT(NOW();"dd.MM.yyyy")
    

    这需要设置
    =TEXT(NOW();"TT.MM.JJJJ")
    

    (是否使用VBA无关紧要,也不会得到翻译)
    您可以看看以下http://www.rondebruin.nl/win/s9/win013.htm

    字符串格式可以是任何格式,因为用户可以随意输入,我需要将其转换为当前的区域性。

    最佳答案

    您可以在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
    

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

    关于c# - DateTime从当前区域性获取代表日,月,年的字母,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30965596/

    10-09 01:09