2016-03-21 24 views
8

Làm thế nào tôi có thể nhận được một DateTime dựa trên một chuỗiConvert to DateTime trong C#

ví dụ: nếu tôi có mytime = "14:00"

Làm thế nào tôi có thể nhận được một đối tượng DateTime với ngày hiện tại như ngày, trừ khi thời gian hiện tại là 14:00:01, sau đó là ngày hôm sau.

+0

Nếu bạn đang nhắm mục tiêu một một múi giờ cụ thể, bạn là tốt hơn hết nhắm vào múi giờ. Thay vì một thời gian cụ thể. Tùy thuộc vào ứng dụng của bạn và nếu nó mở rộng múi giờ, một thư viện sẽ bảo vệ bạn khỏi những thay đổi về múi giờ và sẽ làm việc với thời gian và ngày tháng dễ dàng hơn nhiều. –

Trả lời

8

này cũng đơn giản như phân tích một DateTime với một định dạng chính xác.

Achievable với

var dateStr = "14:00"; 
var dateTime = DateTime.ParseExact(dateStr, "H:mm", null, System.Globalization.DateTimeStyles.None); 

Phương pháp DateTime.ParseExact() (msdn link) đơn giản cho phép bạn vượt qua chuỗi định dạng mà bạn muốn như chuỗi phân tích cú pháp của bạn để trả lại DateTime struct. Bây giờ, Date porition của chuỗi này sẽ được mặc định là ngày todays khi không có phần ngày được cung cấp.

Để trả lời phần thứ hai

Làm thế nào tôi có thể nhận được một đối tượng DateTime với ngày hiện tại như ngày, trừ khi thời điểm hiện tại đã 14:00:01, sau đó ngày nên ngày hôm sau.

Điều này cũng đơn giản, vì chúng tôi biết rằng DateTime.ParseExact sẽ trả về ngày thường (vì chúng tôi không cung cấp phần ngày), chúng tôi có thể so sánh ngày được phân tích là DateTime.Now. Nếu DateTime.Now lớn hơn ngày được phân tích cú pháp của chúng tôi, chúng tôi thêm 1 ngày vào ngày được phân tích cú pháp của chúng tôi.

var dateStr = "14:00"; 

var now = DateTime.Now; 
var dateTime = DateTime.ParseExact(dateStr, "H:mm", null, System.Globalization.DateTimeStyles.None); 

if (now > dateTime) 
    dateTime = dateTime.AddDays(1); 
1

Có một constructor datetime cho

public DateTime(
    int year, 
    int month, 
    int day, 
    int hour, 
    int minute, 
    int second 
) 

Vì vậy, sau đó phân tích các chuỗi để tìm ra giờ, phút và giây và thức ăn đó vào constructor này với các thông số khác được cung cấp bởi Datetime.Now.Day và do đó trên.

2

Bạn có thể sử dụng DateTime.TryParse(): sẽ chuyển đổi biểu diễn chuỗi được chỉ định của ngày và giờ thành số DateTime tương đương và trả về giá trị cho biết liệu chuyển đổi có thành công hay không.

string inTime="14:00"; 
DateTime d; 

if(DateTime.TryParse(inTime,out d)) 
{ 
    Console.WriteLine("DateTime : " + d.ToString("dd-MM-yyyy HH:mm:SS")); 
} 

Chạy dụ here

1

Tôi nghĩ rằng bạn muốn làm một cái gì đó như thế này:

string myTime = "14:00";    
var v = myTime.Split(":".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); 
DateTime obj = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, int.Parse(v[0]), int.Parse(v[1]), DateTime.Now.Second);