2015-06-21 17 views
7

Tôi muốn viết một phương thức cung cấp cho tôi 3 chữ cái - đại diện cho ngày, tháng, năm - từ một datetimeformat.DateTime nhận được các chữ cái đại diện cho ngày, tháng, năm từ hiện tại

Vì vậy, trong nền văn hóa Mỹ en giá trị trả về mong muốn của tôi sẽ là (cộng với dấu phân cách)

  • d
  • M
  • y
  • /

trong de-DE cùng một phương thức phải trả lại

  • T (T ag = ngày)
  • M (M ONAT = tháng)
  • J (J AHR = năm)
  • . (Separator)

tôi đã có một cái nhìn vào hình thức DateTimeFormatInfo lớp CurrentCulture nhưng chỉ có thể tìm thấy các dấu phân cách bạn có bất kỳ ý tưởng làm thế nào tôi có thể nhận được phần còn lại?

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

tôi cần điều này vì TEXT chức năng bên trong Excel không chấp nhận định dạng từ InvariantCulture và chỉ xử lý nó từ CurrentCulture.

Vì vậy, một cái gì đó như thế này là không hợp lệ trong Đức phiên bản Excel:

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

này cần phải được thiết lập với

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

(nó không quan trọng nếu nó được thực hiện với VBA, nó không được dịch) Bạn có thể xem qua số http://www.rondebruin.nl/win/s9/win013.htm

Định dạng chuỗi này có thể là bất kỳ thứ gì vì người dùng có thể nhập nó theo ý muốn và tôi cần dịch nó sang văn hóa hiện tại.

+0

bạn đang sử dụng chuỗi định dạng nào? các giá trị chính không thay đổi với văn hóa. –

+1

không tồn tại trong .net - có lẽ bạn có thể tự viết một cái gì đó. –

+0

@ DanielA.White làm thế nào bạn sẽ làm điều đó, với thao tác chuỗi đơn giản và phương pháp đó trông như thế nào, bạn sẽ nhìn vào đặc tính gì, tôi thực sự không biết tất cả các nền văn hóa có thể khác và phương pháp thao tác chuỗi hợp lệ cho mọi nền văn hóa và mọi người dùng đều có thể thay đổi cài đặt của mình thành một thứ hoàn toàn ngẫu nhiên. –

Trả lời

2

Bạn có thể thực hiện việc này trong VBA: DateTimeStrings sẽ trả về một mảng các mã ngày và dấu phân cách.

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: Tôi không chắc chắn làm thế nào bạn muốn sử dụng này, nhưng, ví dụ, để chèn một công thức tương tự như những gì bạn có ở trên, (ví dụ: =TEXT(A1,"dd/mm/yyy") trong B1 và ​​trong ngôn ngữ thích hợp , bạn có thể chọn A1 và chạy macro sau:

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

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

Rất đẹp. Tôi đã không biết về tài sản 'Quốc tế 'và thậm chí còn ít nhận thức được nó có thể hữu ích như thế nào. –

Các vấn đề liên quan