2010-06-29 76 views
39

Tôi đang truy xuất dữ liệu từ một iSeries nơi có trường ngày và giờ riêng biệt. Tôi muốn tham gia chúng vào một trường DateTime trong dự án C# của tôi. Tôi không thấy cách thêm thời gian vào trường DateTime. Bạn đề nghị hoàn thành điều này như thế nào?Tham gia Ngày và Giờ tới Ngày giờ trong C#

Trả lời

44

Chúng được lưu trữ như thế nào? Giả sử rằng phần ngày đang được lưu trữ dưới dạng DateTime trong nửa đêm của ngày được đề cập và thời gian là TimeSpan, bạn chỉ có thể thêm chúng.

DateTime date = ...; 
TimeSpan time = ...; 

DateTime result = date + time; 
+0

Tôi nghĩ rằng điều này sẽ làm việc tốt nhất cho tôi trong trường hợp này. Cảm ơn! –

+1

điều này sẽ chỉ hoạt động nếu biến ngày có phần thời gian 00:00:00 nếu không biến thời gian sẽ được thêm vào đầu ngày và nó sẽ là kết quả bất ngờ. – batmaci

+2

@batmaci Có, điều đó được nêu cụ thể trong câu trả lời. –

8

Bạn có thể dễ dàng tạo TimeSpan từ trường "thời gian" của mình.

khi bạn đã có, chỉ cần làm:

TimeSpan time = GetTimeFieldData(); 
dateField = dateField.Add(time); 
67

Bạn có thể làm được điều này khá dễ dàng:

DateTime dateOnly; 
DateTime timeOnly; 
... 
DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay); 

TimeOfDay trả về một TimeSpan, mà sau đó bạn thêm vào ngày tháng.

Chỉnh sửa (nhờ người nhận xét bên dưới) - để an toàn, hãy sử dụng dateOnly.Date để đảm bảo chỉ phần ngày.

+4

Một lời cảnh báo tới người xem ở đây mà bạn phải đảm bảo rằng 'DateTime dateOnly' chỉ chứa một ngày khác, với một TimeSpan đủ lớn, khi bạn tạo thành 'Add', bạn sẽ tăng 1 ngày! – Coops

+3

@CodeBlend là chính xác, điều này đã xảy ra với tôi. Cách tốt nhất để trang trải cho mình là: 'DateTime combined = dateOnly.Date.Add (timeOnly.TimeOfDay);' –

+2

Tốt bắt, @RodolfoDeLosSantos! Tôi đã gửi yêu cầu cập nhật giải pháp cho phù hợp với đề xuất của bạn. –

4
Datetime date = new DateTime(Date1.Year, Date1.Month, Date1.Day, Time1.Hour, Time1.Minute, Time1.Second); 
-2

Bạn không thể định dạng phần ngày và thời gian thành các chuỗi riêng biệt, sau đó ghép chúng lại với nhau? Sau đó, bạn có thể phân tích chuỗi trở lại đối tượng DateTime

+1

Không hiệu quả lắm. – Lazlo

0

Lưu ý rằng việc thêm thời gian vào ngày không phải là vấn đề lớn nhất của bạn ở đây. Như @Reed Copsey đã đề cập, bạn chỉ cần tạo một DateTime từ ngày và sau đó là .Add thời gian.

Tuy nhiên, bạn cần đảm bảo rằng ngày và thời gian iSeries (thời gian Unix có thể nhất) có cùng biểu diễn như biểu diễn .Net. Vì vậy, bạn có thể cần phải chuyển đổi nó bằng cách thêm nó vào một ngày 1 tháng 1, 1970 DateTime là tốt.

2

Bạn có thể thêm TimeSpan vào DateTime và viết nội dung tương tự như thế này.

// inside consuming function 
ISeriesObject obj = getMyObject(); 
DateTime dt = getDate(obj) + getTime(obj); 

private DateTime getDate(ISeriesObject obj) 
{ 
    //return a DateTime 
} 


private TimeSpan getTime(ISeriesObject obj) 
{ 
    //return a TimeSpan 
} 
2

này nên làm:

var output = date.Date + time.TimeOfDay; 

hoặc

var output = new DateTime(date.Year, date.Month, date.Day, 
          time.Hour, time.Minute, time.Second); 

giả sử rằng cả hai biến datetime là cả hai loại DateTime

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