elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


  Mostrar Mensajes
Páginas: 1 [2]
11  Programación / .NET (C#, VB.NET, ASP) / Re: pero como le asigno un valor monetario a una hora en: 6 Febrero 2016, 04:35 am
Para calcular correctamente la diferencia completa entre dos intervalos de tiempo/fecha siempre se deben usar las propiedades que empiezan con el prefijo Total****, por que las propiedades que NO empiezan por Total**** lo que hacen es devolver el valor relativo al día (TimeSpan.Days), y esto causaría la obtención de valores incorrectos si intentasemos evaluar lapsos de más de 24 horas.

Esto es un ejemplo, fíjate en la diferencia:
Código
  1. Dim timeDiff As TimeSpan = (TimeSpan.FromDays(2) - TimeSpan.FromDays(1)) ' 1 día de diferencia inicial.
  2.  
  3. MsgBox(timeDiff.Hours)                                 ' Valor:  "0", puesto que es la hora Cero del dia Uno.
  4. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).Hours)      ' Valor:  "1", puesto que es la hora Uno del dia Uno.
  5. MsgBox(timeDiff.TotalHours)                            ' Valor: "24", puesto que hay 24 horas de diferencia entre día Uno y día Dos.
  6. MsgBox(timeDiff.Add(TimeSpan.FromHours(1)).TotalHours) ' Valor: "25", puesto que le añadí 1 hora a las 24 horas de diferencia.

...Esto lo comento por tener en cuenta el supuesto caso en el que el cliente estacionase su vehículo durante más de un día.







Teniendo esta Class para idear y personalizar la lógica de tu algoritmo:
Código
  1. Public NotInheritable Class DateUtils
  2.  
  3.    ''' <summary>
  4.    ''' Prevents a default instance of the <see cref="DateUtils"/> class from being created.
  5.    ''' </summary>
  6.    <DebuggerNonUserCode>
  7.    Private Sub New()
  8.    End Sub
  9.  
  10.    <DebuggerStepThrough>
  11.    Public Shared Function CalculateMoney(ByVal timeIn As TimeSpan, ByVal timeOut As TimeSpan,
  12.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  13.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  14.  
  15.        Dim timeDiff As TimeSpan = (timeOut - timeIn)
  16.  
  17.        Select Case (timeDiff.TotalMinutes)
  18.  
  19.            Case Is <= 0.0R
  20.                Return 0.0R
  21.  
  22.            Case Is <= 60.0R
  23.                Return (x1HourMoney)
  24.  
  25.            Case Else
  26.                Dim fractions As Double = Math.Ceiling((timeDiff.TotalMinutes - 60.0R) / 15.0R)
  27.                Dim supplement As Double = (fractions * x15MinMoneyAfter1Hour)
  28.                Return (x1HourMoney + supplement)
  29.  
  30.        End Select
  31.  
  32.    End Function
  33.  
  34.    <DebuggerStepThrough>
  35.    Public Shared Function CalculateMoney(ByVal dateIn As Date, ByVal dateOut As Date,
  36.                                          Optional ByVal x1HourMoney As Double = 500.0F,
  37.                                          Optional ByVal x15MinMoneyAfter1Hour As Double = 150.0F) As Double
  38.  
  39.        Return DateUtils.CalculateMoney(TimeSpan.FromTicks(dateIn.Ticks), TimeSpan.FromTicks(dateOut.Ticks), x1HourMoney, x15MinMoneyAfter1Hour)
  40.  
  41.    End Function
  42.  
  43. End Class

Puedes utilizarlo de las siguientes maneras (esto son solo unos ejemplos para demostrar los resultados obtenidos)
Código
  1. Public NotInheritable Class Form1 : Inherits Form
  2.  
  3.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  4.    Handles MyBase.Shown
  5.  
  6.        Dim datePairs As New List(Of KeyValuePair(Of Date, Date)) From
  7.            {
  8.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:01")),
  9.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("12:15")),
  10.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:00")),
  11.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:01")),
  12.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:15")),
  13.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:30")),
  14.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("13:31")),
  15.                New KeyValuePair(Of Date, Date)(Date.Parse("12:00"), Date.Parse("14:00"))
  16.            }
  17.  
  18.        For Each datePair As KeyValuePair(Of Date, Date) In datePairs
  19.  
  20.            Dim sb As New StringBuilder
  21.            With sb
  22.                .AppendLine(String.Format("Time In  : {0}", datePair.Key.ToString("hh\:mm")))
  23.                .AppendLine(String.Format("Time Out : {0}", datePair.Value.ToString("hh\:mm")))
  24.                .AppendLine(String.Format("Time Diff: {0}", (datePair.Value - datePair.Key).ToString("%h\h\:%m\m")))
  25.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  26.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(datePair.Key, datePair.Value)))
  27.            End With
  28.  
  29.            Console.WriteLine(sb.ToString)
  30.  
  31.        Next
  32.  
  33.    End Sub
  34.  
  35. End Class

Código
  1.    Private Sub Form1_Shown(ByVal sender As Object, ByVal e As EventArgs) _
  2.    Handles MyBase.Shown
  3.  
  4.        Dim timePairs As New List(Of KeyValuePair(Of TimeSpan, TimeSpan)) From
  5.            {
  6.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.02)),
  7.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(12.25)),
  8.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.0)),
  9.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.02)),
  10.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.25)),
  11.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.5)),
  12.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(13.52)),
  13.                New KeyValuePair(Of TimeSpan, TimeSpan)(TimeSpan.FromHours(12.0), TimeSpan.FromHours(14.0))
  14.            }
  15.  
  16.        For Each timePair As KeyValuePair(Of TimeSpan, TimeSpan) In timePairs
  17.  
  18.            Dim sb As New StringBuilder
  19.            With sb
  20.                .AppendLine(String.Format("Time In  : {0}", timePair.Key.ToString("hh\:mm")))
  21.                .AppendLine(String.Format("Time Out : {0}", timePair.Value.ToString("hh\:mm")))
  22.                .AppendLine(String.Format("Time Diff: {0}", (timePair.Value - timePair.Key).ToString("%h\h\:%m\m")))
  23.                .AppendLine(String.Format(CultureInfo.GetCultureInfo("en-US").NumberFormat,
  24.                                          "Payment  : ${0:n0}", DateUtils.CalculateMoney(timePair.Key, timePair.Value)))
  25.            End With
  26.  
  27.            Console.WriteLine(sb.ToString)
  28.  
  29.        Next
  30.  
  31.    End Sub
  32.  
  33. End Class

Resultado de ejecución:

Saludos


Muchas gracias por responder Eleкtro se nota que te manejas en el tema   pero no  entiendo tu codigo para hacerlo correr vb net  podrias explicarme por favor soy novato
me gusto eso de las 24horas como dices tu si el auto esta estacionado mas tiempo genial la idea

esta viendo las salida de tu ejemplo

por ejemplo 12:00 salio 13:01 eso es una hora y un minutos tu resultado sale $650
debiria ser $500
pero  son 12:00 salio 13:15 eso es una hora y quince minutos deberia cobra $650
12  Programación / .NET (C#, VB.NET, ASP) / Re: pero como le asigno un valor monetario a una hora en: 6 Febrero 2016, 04:27 am
Creo que tienes un mal enfoque no necesitas asignar un valor monetario a una fecha
mira este ejemplo solo basta con hacer unas simple multiplicacion y division

Código
  1.  
  2.                Dim fechaini As DateTime
  3. Dim fechafin As DateTime
  4. Dim cobro As Integer=0
  5.  
  6. DateTime.TryParse("12:00", fechaini)
  7. DateTime.TryParse("12:30", fechafin)
  8.  
  9. Dim dif As TimeSpan = fechafin - fechaini
  10.  
  11. If dif.Hours>=1 Then
  12. cobro=cobro+(500*dif.Hours)
  13.  
  14. If dif.Minutes>15 Then
  15. Dim n15min As Integer =dif.Minutes\15
  16. cobro =cobro+n15min*150
  17. End If
  18.  
  19. ElseIf dif.Minutes>=1 Then
  20. cobro=500
  21. End If
  22.  
  23.  
  24. Console.WriteLine("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")
  25. Console.WriteLine("El costo total es de "+Convert.ToString(cobro))
  26. Console.ReadLine()
  27.  

Si algo anda mal o no es lo que buscas me avisas
saludos...

muchas gracias crack 81  por responder tan prontamente pero tu codigo lo hice correr
no funciona si por ejemplo pongo las 12:00 y salio 13:15 ya deberia combrarme $650
no lo hace pero si le pongo 12:00 y 13:30 cobra 800 eso esta bien
 
13  Programación / .NET (C#, VB.NET, ASP) / pero como le asigno un valor monetario a una hora en: 5 Febrero 2016, 01:50 am
buenas noches
 si me puede orientar por favor gracias estoy tratando de hacer una  aplicación de un estacionamiento

entrada y salida de vehículos

por ejemplo un auto llego 12:00 y salio 13:00 = 01:00  estuvo una hora el cobro seria $500

¿si el vehículo estuvo ejemplo llego  12:00 y salio 12:15 = estuvo 15 minutos pero igual se le cobra los $500?

otro ejemplo si el vehiculo llego 12:00 y salio 13:15 = estuvo 01:15  entoces cada 15 minutos depues de la hora deberia cobrarse $150 cada quince minutos después de la hora
 

¿ pero como le asigno un valor monetario a una hora ?
este es mi codigo para sumar las horas
Código
  1. Dim fechaini As DateTime
  2.        Dim fechafin As DateTime
  3.  
  4.        DateTime.TryParse(TextBox1.Text, fechaini) ' 12:00
  5.        DateTime.TryParse(TextBox2.Text, fechafin) '13:00
  6.  
  7.  
  8.        Dim dif As TimeSpan = fechafin - fechaini
  9.  
  10.        MsgBox("Han transcurridos " & dif.Hours & ":" & dif.Minutes & " hrs.")



Páginas: 1 [2]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines