Convertir minutos de cadena a horas

Recibiré una cadena de minutos y me gustaría convertir eso en la cantidad total de tiempo invertido.

si son 90 minutos, me gustaría convertirlo a 1 hora y 30 minutos.

si fueran 150 minutos, me gustaría que se convirtieran en 2 horas y 30 minutos.

Esto es lo que tengo hasta ahora:

DataTable data = GeneralFunctions.GetData( query );
object sumObject;
sumObject = data.Compute( "Sum(Minutes_Spent)", "" );
if ( reportType == 1 )
{
    RepeaterPCBillable.DataSource = data;
    RepeaterPCBillable.DataBind();
    LabelPCBillable.Text = sumObject.ToString();
}
else

No estoy seguro de si hay alguna función de tiempo incorporada que produzca los resultados que necesito o si tendré que hacer algún tipo de división.

preguntado el 03 de mayo de 12 a las 15:05

4 Respuestas

No hay nada incorporado.

Deberá escribir sus propias rutinas de análisis para su cadena.

Ejemplo en C #:

// assumes input is valid for integer parsing
int totalMinutes = int.Parse(inputString);
int hours = totalMinuts / 60;
int minutes = totalMinutes % 60;

contestado el 03 de mayo de 12 a las 16:05

Siempre he tenido problemas para entender el # frente a .0 en el formato... no importa cuántos artículos lea... :( - Royi Namir

¿Tiene esto alguna ventaja sobre el TimeSpan sugerido que otros han sugerido? - James Wilson

leer lo existente está bien, pero cuando intento hacer algo por mi cuenta, siempre fallo... ejemplo enemigo: 123456.ToString(",00") significado: quiero cada 2 dígitos - una coma como esta: 12,34,56 (no relacionado con las matemáticas, pero lo quiero así) - Royi Namir

@JamesWilson: fácil de entender. Tampoco puedes pasar de 23 horas con TimeSpan (comienza a rodar a días). - Oded

Ahh, en ese caso tendré que ir por esta ruta ya que podría pasar más de 24 horas. Y se factura por horas. ¡Gracias! - James Wilson

Puede usar el TimeSpan.FromMinutes, y luego recuperar horas y minutos de él.

var span = TimeSpan.FromMinutes(int.Parse(inputString));
var hours = span.Hours;
var minutes = span.Minutes;

contestado el 03 de mayo de 12 a las 16:05

@Oded ¿C# no convertiría automáticamente mi int a double? - Serguéi Kalinichenko

No hay nada incorporado, pero no es difícil de hacer. Hagamos esto paso a paso. Esta es nuestra entrada de ejemplo:

var input = "130 minutes";

Ahora usamos una expresión regular para extraer el número delante de minutes:

var match = Regex.Match(input, @"^(\d+) minutes$");
if (!match.Success)
    throw new Exception("Invalid input format");

Luego, convertimos la cadena con los minutos en un número entero:

var minutes = int.Parse(match.Groups[1].Value);    // now contains 130

A continuación, dividimos las horas y los minutos, usando la división de enteros y la operación de módulo:

var hours = minutes / 60;
minutes = minutes % 60;

Y, por último, podemos volver a formatear el resultado en una cadena:

var result = String.Format("{0} hours and {1} minutes", hours, minutes);  // 2 hours and 10 minutes

contestado el 03 de mayo de 12 a las 16:05

Bueno, aquí hay un algoritmo general:

int hours=string_minutes/60;
int minutes=string_minutes%60;

Básicamente, la primera operación te da el Cociente y luego la segunda te da el Resto/

contestado el 03 de mayo de 12 a las 16:05

Por cierto, primero convierte string_minutes a Int - karan k

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.