2009-02-04 44 views
6

Quiero añadir segundos (00:00:02) o minutos (00:00:20) sobre el valor de fecha y hora (puede ser almacenada tipo de cadena) pero ¿cómo? Ejemplos:Suma o suma de horas como 13: 30 + 00: 00: 20 = 13: 30: 20 pero ¿cómo?

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) 

¿Me puede ayudar? Necesito sus algoritmos fresco :) Gracias de nuevo ...

+0

Hola, por desgracia, de su ejemplo, no está claro lo que está después es la razón por la que todavía no hay una buena respuesta. Si tratas de mostrar un poco más del código que tienes, o das un breve resumen de lo que estás haciendo realmente, entonces alguien puede ayudarte. –

+0

pregunta de plzsendtehcodez. (Consulte "Necesito su algoritmo genial" y su posterior "respuesta"). –

Respuesta

4

Si decide utilizar el TimeSpan, ser consciente de la parte Días:

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

No estoy seguro de lo que está buscando, pero puede que no sólo tiene que utilizar el construido en funciones a DateTime objeto C# 's?

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

utilizar la estructura TimeSpan. puede agregar TimeSpans juntos, o puede agregar un TimeSpan a DateTime para producir un nuevo DateTime.

+0

bien, pero 13: 30: 32 = 11:30:20 ¿cómo se puede agregar dos fecha y hora? – Penguen

4

Adición de dos datetimes de cuerdas:

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

Adición de una cadena de tiempo a una fecha y hora:

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

Adición de tiempo como en el ejemplo:

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

Por último, el ejemplo como fechas (¡no probado!):

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

Tenga en cuenta que esta es la codificación descuidada, pero se entiende la idea. Necesita verificar de alguna manera que la cadena es realmente analizable.

+0

No tengo vs 2008. Necesito vs 2005. ¡Gracias! – Penguen

+0

Solución: TimeSpan a = TimeSpan.Parse ("12:30:22") + TimeSpan.Parse ("11:20:22"); Console.Write (a.ToString()); Console.ReadKey(); ¡Gracias everyBody! Me encanta Stackoverflow ... – Penguen

+4

Luego marque esta respuesta como aceptada. –

1

Usted debe echar un vistazo a TimeSpan.Parse. Esto convierte una cadena en un objeto TimeSpan. De esa manera usted puede hacer cosas como

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

Para dividir una cadena como "00: 00: 20 + 00: 01: 00" mirar a string.split

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

El problema es más abstracto. Como ya se mencionó, en .NET hay dos tipos: DateTime y TimeSpan. El tipo DateTime representa un punto específico en el tiempo. No es un intervalo de tiempo. Es un lugar específico en todo tiempo desde el nacimiento del Universo. Incluso si establece los componentes año/mes/día en 0, aún representará algún punto absoluto en el tiempo. No es un período de tiempo.

El TimeSpan por el contrario representa un cierto intervalo. 1 minuto, 2 días, lo que sea. No se especifica CUÁNDO, CUÁNTO CUÁNDO.

Así que si usted fuera a restar dos objetos DateTime que se obtendría un objeto TimeSpan que especifica la cantidad de tiempo que hay entre ellos. Y si agrega un TimeSpan a DateTime, obtiene otro DateTime. Pero no puede agregar un DateTime a otro DateTime, eso no tendría sentido.

Me parece que debería estar trabajando con TimeSpan s todo el tiempo, porque se trata de largos períodos de tiempo, no puntos absolutos en el tiempo. Si obtiene estas longitudes de su fuente como DateTime, entonces eso no es correcto, y debería convertirlas a TimeSpan s de alguna manera. El método de análisis sintáctico es una forma que se ha sugerido, pero también puede tratar de restar DateTime de él. Eso podría ser más rápido y más independiente de la cultura.

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

En StackOverflow, no solo pegue código, sino también explique su enfoque. En este caso específico, es posible que también desee explicar qué aporta su respuesta tardía a las respuestas ya dadas (y aceptadas). –

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(); 
    } 
Cuestiones relacionadas