2009-02-01 44 views
16

Làm cách nào để định dạng ngày tháng là dd/mm/yyyy hoặc mm/dd/yy?ngày định dạng bằng C#

Giống như trong VB format("dd/mm/yy",now)

Làm cách nào để thực hiện điều này trong C#?

Trả lời

44

Nó gần như giống nhau, chỉ cần sử dụng DateTime.ToString() phương pháp, ví dụ:

DateTime.Now.ToString("dd/MM/yy"); 

Hoặc:

DateTime dt = GetDate(); // GetDate() returns some date 
dt.ToString("dd/MM/yy"); 

Bên cạnh đó, bạn có thể muốn xem xét sử dụng một trong những ngày/định dạng thời gian định sẵn , ví dụ:

DateTime.Now.ToString("g"); 
// returns "02/01/2009 9:07 PM" for en-US 
// or "01.02.2009 21:07" for de-CH 

Đảm bảo định dạng sẽ chính xác, độc lập cài đặt ngôn ngữ hiện tại.

Kiểm tra các trang MSDN sau để biết thêm thông tin


Một số bổ sung, thông tin liên quan:

Nếu bạn muốn hiển thị một ngày trong một ngôn ngữ/văn hóa cụ thể, sau đó là một tình trạng quá tải của các phương pháp ToString() mà phải mất một IFormatProvider:

DateTime dt = GetDate(); 
dt.ToString("g", new CultureInfo("en-US")); // returns "5/26/2009 10:39 PM" 
dt.ToString("g", new CultureInfo("de-CH")); // returns "26.05.2009 22:39" 

Hoặc cách khác, bạn có thể đặt CultureInfo của thread hiện hành trước để định dạng ngày:

Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US"); 
dt.ToString("g"); // returns "5/26/2009 10:39 PM" 

Thread.CurrentThread.CurrentCulture = new CultureInfo("de-CH"); 
dt.ToString("g"); // returns "26.05.2009 22:39" 
+2

nên được chữ in hoa mM cho tháng, mm có nghĩa là phút ... –

+2

tôi khuyến khích bạn làm theo lời khuyên của Martin và đi với các mã được xác định trước, đó là nhận thức về văn hóa. Bạn có thể không cần nó ngay bây giờ nhưng trong tương lai nó có thể làm mọi thứ dễ dàng hơn. –

+0

+1 cho các định dạng được xác định trước –

8
string.Format("{0:dd/MM/yyyy}", DateTime.Now) 

Tra cứu "chuỗi định dạng" trên MSDN để xem tất cả các tùy chọn định dạng.

Sử dụng yy, yyyy, M, MM, MMM, MMMM, d, dd, ddd, dddd cho thành phần ngày

Sử dụng h, hh, H, HH, m, mm, s, ss cho thành phần thời gian trong ngày

+0

Đây là Liên kết MSDN. Có thể giúp người khác. https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx – Sai

2

Hãy thử cách này:

String.Format("{0:MM/dd/yyyy}", DateTime.Now); // 01/31/2009 
String.Format("{0:dd/MM/yyyy}", DateTime.Now); // 31/01/2009 
String.Format("{dd/MM/yyyy}", DateTime.Now); // 31/01/2009 
+0

Ví dụ này sẽ lần lượt gọi Date.ToString (định dạng chuỗi), như được hiển thị bên dưới trong câu trả lời của Martin. Đó là một cách đơn giản hơn, trực tiếp hơn là đi qua String.Format. – abelenky

+0

vâng, bạn nói đúng, câu trả lời của Martin là câu trả lời trực tiếp, cảm ơn. – Canavar

2

Trong bạn cũng có thể viết

DateTime aDate = new DateTime(); 
string s = aDate.ToShortDateString(); 

cho một ký hiệu ngắn

hoặc

DateTime aDate = new DateTime(); 
string s = aDate.ToLongDateString(); 

cho một ký hiệu dài như "Sunday, Febuary 1, 2009".

Hoặc xem qua số MSDN để có thể sở hữu .ToString ("???");

2

Hơn thế nữa, sử dụng chỉ

DateTime.Now.ToString() 

hoặc

DateTime.Now.ToString(CultureInfo.CurrentCulture) 

sử dụng định dạng người dùng thích.

0

Tôi đã gặp sự cố tương tự. Những gì tôi cần làm là thêm một tham chiếu ở đầu lớp và thay đổi CultureInfo của luồng hiện đang thực thi.

using System.Threading; 

string cultureName = "fr-CA"; 
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName); 

DateTime theDate = new DateTime(2015, 11, 06); 
theDate.ToString("g"); 
Console.WriteLine(theDate); 

Tất cả bạn phải làm là thay đổi tên văn hóa, ví dụ: "en-US" = Hoa Kỳ "fr-FR" = nói tiếng Pháp Pháp "fr-CA" = tiếng Pháp nói Canada vv ...

0

tôi nghĩ rằng đây là đơn giản như bạn có thể chuyển đến và đi từ định dạng nào mà không cần bất kỳ sự nhầm lẫn

DateTime.ParseExact(txt.Text, "dd/MM/yyyy", CultureInfo.InvariantCulture).ToString("yyyy/MM/dd")); 
Các vấn đề liên quan