public static void Main()
var inicio = new DateTime(2021, 10, 10, 21, 37, 00) ;
var ahora = DateTime.UtcNow.AddHours(2) ;
var lo_que_lleva_procesado = ( ahora - inicio ).TotalSeconds ;
double lotes_totales = 27795.0 ;
double lotes_procesados_actualmente = 17377.0 ;
var lotes_restantes = ( lotes_totales - lotes_procesados_actualmente ) ;
var segundos_por_lote = lo_que_lleva_procesado / lotes_procesados_actualmente ;
var segundos_restantes = lotes_restantes * segundos_por_lote ;
var tiempo_restante_previsto = TimeSpan.FromSeconds( segundos_restantes ) ;
var conclusion_prevista = ( ahora + tiempo_restante_previsto ) ;
Console.WriteLine( "Inicio: " + inicio ) ;
Console.WriteLine( "Ahora: " + ahora ) ;
Console.WriteLine( "Lo que lleva procesado: " + lo_que_lleva_procesado ) ;
Console.WriteLine( "Lotes totales: " + lotes_totales ) ;
Console.WriteLine( "Lotes procesados actualmente: " + lotes_procesados_actualmente + " (" + ( lotes_procesados_actualmente / lotes_totales ).ToString("P") + ")" ) ;
Console.WriteLine( "Lotes restantes: " + lotes_restantes ) ;
Console.WriteLine( "Segundos restantes: " + segundos_restantes ) ;
Console.WriteLine( "Tiempo restante: " + tiempo_restante_previsto ) ;
Console.WriteLine( "Finalización prevista: " + conclusion_prevista ) ;