2015-06-21 14 views
7

Vorrei scrivere un metodo che mi dà le 3 lettere - che rappresentano il giorno, il mese, l'anno - da un formato datetime.DateTime ottenere le lettere che rappresentano giorno, mese, anno dalla correnteiatura

Così nella cultura en-US miei valori di ritorno desiderati sarebbe (più il separatore)

  • d
  • M
  • y
  • /

a de-DE lo stesso metodo deve restituire

  • T (T ag = giorno)
  • M (M onat = mese)
  • J (J Ahr = anno)
  • . (Separatore)

ho avuto uno sguardo al modulo DateTimeFormatInfo classe CurrentCulture ma potrebbe trovare solo il separatore hai qualche idea di come posso ottenere il resto?

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

ho bisogno di questo perché la funzione ditesto all'interno Excel non accetta il formato dalla InvariantCulture e gestisce solo dal CurrentCulture.

Quindi qualcosa come questo non è valido in tedesco versione di Excel:

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

questo deve essere impostato con

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

(non importa se fatto con VBA, è http://www.rondebruin.nl/win/s9/win013.htm

Il formato stringa può essere qualsiasi cosa poiché l'utente può inserirlo come preferisce s e ho bisogno di tradurlo alla cultura attuale.

+0

quale stringa di formato stai usando? i valori chiave non cambiano con la cultura. –

+1

che non esiste in .net - forse potresti scrivere qualcosa da te. –

+0

@ DanielA.White come lo faresti, con una semplice manipolazione delle stringhe e come sarebbe il metodo, quali proprietà guarderesti, non conosco tutte le culture dove potrebbe essere diverso e un metodo di manipolazione delle stringhe valido per ogni cultura e ogni utente potrebbe aver cambiato le sue impostazioni in qualcosa di completamente casuale. –

risposta

2

È possibile eseguire questa operazione in VBA: DateTimeStrings restituirà un array di codici di data e separatore.

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: Non sono sicuro di come si desidera utilizzare questo, ma, per esempio, per inserire una formula simile a quello che si ha in precedenza, (ad esempio: =TEXT(A1,"dd/mm/yyy") in B1 e nella lingua appropriata , è possibile selezionare A1 ed eseguire la seguente 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 

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

+0

Molto bello. Non ero a conoscenza della proprietà "Internazionale" e ancora meno consapevole di come potrebbe essere utile. –

Problemi correlati