2009-02-04 17 views
6

Tôi muốn thêm giây (00:00:02) hoặc phút (00:00:20) vào giá trị ngày giờ (có thể được lưu trữ loại chuỗi) nhưng làm cách nào? Ví dụ:Thêm hoặc Tổng số giờ như 13: 30 + 00: 00: 20 = 13: 30: 20 nhưng làm cách nào?

13:30+02:02:02= 15:32:02 , 
13:30+00:00:01= 13:30:01 , 
13:30+00:01:00=13:31:00 or 13:30 (not important) 

Bạn có thể giúp tôi không? Tôi cần thuật toán tuyệt vời của bạn :) Cảm ơn bạn lần nữa ...

+0

Hi, không may từ ví dụ của bạn nó không phải là rõ ràng những gì bạn đang sau đó là lý do tại sao không có một câu trả lời tốt được nêu ra. Nếu bạn thử và hiển thị thêm một số mã bạn có, hoặc đưa ra một phác thảo ngắn gọn về những gì bạn đang thực sự làm thì ai đó có thể giúp bạn. –

+0

câu hỏi plzsendtehcodez. (Xem "Tôi cần thuật toán tuyệt vời của bạn" và "phản hồi" tiếp theo của mình). –

Trả lời

4

Nếu bạn chọn sử dụng các đối tượng TimeSpan, được nhận thức về ngày phần:

TimeSpan t1 = TimeSpan.Parse("23:30"); 
TimeSpan t2 = TimeSpan.Parse("00:40:00"); 
TimeSpan t3 = t1.Add(t2); 
Console.WriteLine(t3); // 1.00:10:00 

với DateTime:

DateTime d1 = DateTime.Parse("23:30"); 
DateTime d2 = DateTime.Parse("00:40:00"); 
DateTime d3 = d1.Add(d2.TimeOfDay); 
Console.WriteLine(d3.TimeOfDay); // 00:10:00 
1

Không thực sự chắc chắn bạn đang làm gì, nhưng bạn có thể không chỉ sử dụng các hàm dựng sẵn cho đối tượng DateTime của C#?

DateTime myDate = DateTime.Now; 

myDate = myDate.AddHours(1); 
myDate = myDate.AddMinutes(30); 
myDate = myDate.AddSeconds(45); 
9
myDateTimeVariable.Add(new TimeSpan(2,2,2)); 
1

sử dụng cấu trúc TimeSpan. bạn có thể thêm TimeSpans cùng nhau hoặc bạn có thể thêm một TimeSpan vào một DateTime để tạo ra một DateTime mới.

+0

ok nhưng 13: 30: 32 = 11:30:20 làm cách nào để thêm hai ngày giờ? – Penguen

4

Thêm hai datetimes từ chuỗi:

var result = DateTime.Parse(firstDate) + DateTime.Parse(secondDate); 

Thêm một lần chuỗi để một datetime:

var result = existingDateTime.Add(TimeSpan.Parse(stringTime); 

Thêm thời gian như trong ví dụ của bạn:

var result = TimeSpan.Parse("12:30:22") + TimeSpan.Parse("11:20:22"); 

Cuối cùng, ví dụ của bạn dưới dạng ngày (không được kiểm tra!):

var result = DateTime.Parse("12:30:22") + DateTime.Parse("11:20:22"); 

Lưu ý rằng đây là mã hóa cẩu thả, nhưng bạn có ý tưởng. Bạn cần phải xác minh bằng cách nào đó rằng chuỗi thực sự có thể phân tích cú pháp.

+0

tôi không có so với năm 2008. tôi cần so với năm 2005. cảm ơn! – Penguen

+0

Giải pháp: TimeSpan a = TimeSpan.Parse ("12:30:22") + TimeSpan.Parse ("11:20:22"); Console.Write (a.ToString()); Console.ReadKey(); Cảm ơn mọi người! tôi yêu Stackoverflow ... – Penguen

+4

Sau đó đánh dấu câu trả lời này là được chấp nhận. –

1

Bạn nên xem TimeSpan.Parse. Điều này chuyển đổi một chuỗi thành một đối tượng TimeSpan. Bằng cách đó bạn có thể làm những thứ như thế

TimeSpan a = TimeSpan.Parse(timeStringA)+TimeSpan.Parse(TimeStringB); 

Để chia một chuỗi như "00: 00: 20 + 00: 01: 00" nhìn vào string.split

stringA = timeSting.split('+')[0]; 
stringb = timeSting.split('+')[1]; 
2

Vấn đề trừu tượng hơn. Như đã đề cập, trong .NET có hai loại - DateTimeTimeSpan. Loại DateTime thể hiện một thời điểm cụ thể. Nó không phải là một khoảng thời gian. Đó là một vị trí cụ thể trong mọi thời đại kể từ khi sự ra đời của vũ trụ. Ngay cả khi bạn đặt thành phần năm/tháng/ngày thành 0, nó vẫn sẽ đại diện cho một số điểm tuyệt đối đúng lúc. Không phải là khoảng thời gian.

Mặt khác đại diện cho một số khoảng thời gian. 1 phút, 2 ngày, bất cứ điều gì. Nó không được chỉ định WHEN, chỉ cần CÁCH DÀI.

Vì vậy, nếu bạn đã trừ hai đối tượng DateTime, bạn sẽ nhận được một đối tượng TimeSpan xác định khoảng thời gian giữa chúng. Và nếu bạn thêm một TimeSpan vào một DateTime bạn sẽ nhận được một DateTime khác. Nhưng bạn không thể thêm một DateTime vào một DateTime khác - điều đó sẽ không có ý nghĩa gì cả.

Nghe có vẻ như tôi, bạn nên làm việc với TimeSpan mọi lúc, bởi vì bạn đang đối phó với độ dài thời gian, không phải là thời điểm tuyệt đối. Nếu bạn nhận được những độ dài từ nguồn của bạn như là một DateTime thì đó là thực sự không chính xác, và bạn nên chuyển đổi chúng để TimeSpan s bằng cách nào đó. Phương pháp phân tích cú pháp là một cách đã được đề xuất, nhưng bạn cũng có thể thử trừtừ đó. Điều đó có thể nhanh hơn và độc lập hơn về văn hóa.

0
return string.Format("{0}:{1}:{2}", mytimespan.Hours 
    + (mytimespan.Days*24),mytimespan.Minutes,mytimespan.Seconds); 
+1

Tại StackOverflow vui lòng không chỉ dán mã mà còn giải thích cách tiếp cận của bạn. Trong trường hợp cụ thể này, bạn cũng có thể muốn giải thích câu trả lời cuối của bạn thêm vào các câu trả lời đã được đưa ra (và được chấp nhận). –

0
static void Main(string[] args) 
    { 
     String timeText = "3/23/2015 12:00:13 AM"; 
     String timeText2 = "3/23/2015 1:45:03 AM"; 

     DateTime time = Convert.ToDateTime(timeText); 
     string temp = time.ToString("HH:mm:ss"); 

     DateTime time2 = Convert.ToDateTime(timeText2); 
     string temp2 = time2.ToString("HH:mm:ss"); 

     TimeSpan t1 = TimeSpan.Parse(temp); 
     TimeSpan t2 = TimeSpan.Parse(temp2); 

     Console.Out.WriteLine(t1 + t2); // 01:45:16 

     Console.ReadLine(); 
    } 
Các vấn đề liên quan