Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

DateTime get the letters representing day, month, year from the currentculture

I would like to write a method that gives me the 3 letters - representing the day, month, year - from a datetimeformat.

So in en-US culture my desired return values would be (plus the separator)

  • d
  • M
  • y
  • /

in de-DE the same method should return

  • T (Tag = day)
  • M (Monat = month)
  • J (Jahr = year)
  • . (Separator)

I had a look into the DateTimeFormatInfo class form CurrentCulture but could only find the separator do you have any idea how I can get the rest?

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

I need this because the TEXT function inside Excel doesn't accept the format from the InvariantCulture and only handles it from the currentculture.

So something like this isn't valid in german Excel version:

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

this needs to be set with

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

(it doesn't matter if its done with VBA, it doesn't get translated) You can have a look at the following http://www.rondebruin.nl/win/s9/win013.htm

The string format can be anything since the user can input it as he likes and I need to translate it to the current culture.

like image 950
Rand Random Avatar asked Jun 21 '15 14:06

Rand Random


People also ask

What is DateTime object in c#?

C# DateTime is a structure of value Type like int, double etc. It is available in System namespace and present in mscorlib. dll assembly. It implements interfaces like IComparable, IFormattable, IConvertible, ISerializable, IComparable, IEquatable.

What is DateTime Cultureinfo?

A DateTimeFormatInfo that defines the culturally appropriate format of displaying dates and times.

Which is an example of correctly parsing a date time string into a DateTime object in net?

DateTime dateTime10 = DateTime. ParseExact(dateString, "mm/dd/yyyy", provider); dateString = "not a date"; // Exception: The string was not recognized as a valid DateTime.


1 Answers

You can do this in VBA: DateTimeStrings will return an array of the date codes and separator.

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: I'm not sure how you want to use this, but, for example, to insert a formula similar to what you have above, (eg: =TEXT(A1,"dd/mm/yyy") in B1 and in the appropriate language, you could select A1 and run the following macro:

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

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

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

like image 145
Ron Rosenfeld Avatar answered Oct 05 '22 02:10

Ron Rosenfeld