2009-02-04 35 views
6

Voglio aggiungere secondi (00:00:02) o minuti (00:00:20) sul valore datetime (può essere memorizzato il tipo di stringa) ma come? Esempi:Aggiungi o Somma di ore come 13: 30 + 00: 00: 20 = 13: 30: 20 ma come?

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) 

Potete aiutarmi? Ho bisogno del tuo fantastico algoritmo :) Grazie ancora ...

+0

Ciao, purtroppo dal vostro esempio non è chiaro che cosa siete dopo, che è il motivo per cui non esiste ancora una buona risposta. Se provi a mostrare un po 'di più del codice che hai, o fornisci una breve descrizione di ciò che stai facendo, qualcuno potrebbe essere in grado di aiutarti. –

+0

domanda plzsendtehcodez. (Vedi "Ho bisogno del tuo algoritmo fico" e la sua "risposta" successiva). –

risposta

4

Se si sceglie di utilizzare il TimeSpan, essere informati circa la parte Giorni:

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 

Con 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

Non sei proprio sicuro di cosa stai cercando, ma non puoi semplicemente usare le funzioni integrate nell'oggetto DateTime di 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

utilizzare la struttura TimeSpan. è possibile aggiungere TimeSpan insieme oppure è possibile aggiungere un TimeSpan a un DateTime per produrre un nuovo DateTime.

+0

ok ma 13: 30: 32 = 11:30:20 come è possibile aggiungere due datetime? – Penguen

4

L'aggiunta di due datetimes dalle stringhe:

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

Aggiunta di un tempo stringa in un datetime:

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

volta aggiungendo come nel tuo esempio:

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

Infine, il tuo esempio come date (non testato!):

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

Si noti che si tratta di una codifica trascurata, ma si ottiene l'idea. È necessario verificare in qualche modo che la stringa sia effettivamente parsabile.

+0

non ho vs 2008. ho bisogno di vs 2005. grazie! – Penguen

+0

Soluzione: TimeSpan a = TimeSpan.Parse ("12:30:22") + TimeSpan.Parse ("11:20:22"); Console.Write (a.ToString()); Console.ReadKey(); Grazie a tutti! Adoro Stackoverflow ... – Penguen

+4

Quindi segna questa risposta come accettata. –

1

Si dovrebbe dare un'occhiata a TimeSpan.Parse. Questo converte una stringa in un oggetto TimeSpan. In questo modo è possibile fare cose come

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

Per dividere una stringa come "00: 00: 20 + 00: 01: 00" guarda string.split

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

Il problema è più astratto. Come già accennato, in .NET ci sono due tipi: DateTime e TimeSpan. Il tipo DateTime rappresenta un punto specifico nel tempo. Non è un intervallo di tempo. È un luogo specifico in ogni momento dalla nascita dell'Universo. Anche se si impostano i componenti anno/mese/giorno su 0, rappresenterà comunque un punto assoluto nel tempo. Non un periodo di tempo.

Il TimeSpan rappresenta invece un intervallo. 1 minuto, 2 giorni, qualunque cosa. Non è specificato QUANDO, QUANTO TEMPO.

Quindi, se si dovesse sottrarre due oggetti DateTime si otterrebbe un oggetto TimeSpan che specifica quanto tempo c'è tra di loro. E se aggiungi un TimeSpan a un DateTime ottieni un altro DateTime. Ma non è possibile aggiungere un DateTime ad un altro DateTime - questo non avrebbe senso.

Mi sembra che dovresti lavorare con TimeSpan s tutto il tempo, perché hai a che fare con tempi lunghi, non con punti assoluti nel tempo. Se ottieni queste lunghezze dalla tua sorgente come DateTime, in realtà non è corretto, e dovresti convertirli in qualche modo in TimeSpan s. Il metodo di analisi è un modo suggerito, ma potresti anche provare a sottrarre lo zero DateTime da esso. Potrebbe essere più veloce e più indipendente dalla cultura.

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

In StackOverflow, non incollare semplicemente il codice, ma anche spiegare il tuo approccio. In questo caso specifico potresti anche voler spiegare quale risposta tardiva aggiunge alle risposte già date (e accettate). –

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(); 
    } 
Problemi correlati