From: Saga on 29 Apr 2010 16:44 I need to add the time a a date, specifically, the current date. This seemed easy enough, but I found that thi wasn't so. As in input I get 3 or 4 digits representing the date. Valid input string are: "0344", "1102", "456" The minutes are always 2 digits, but the hour can be either 1 or 2 digits. What I did was first come up with a function to normalize the input string which formats it hh:mm: private function sSetTime(byval strTime as string) as integer strTime = strTime.ToString("D4") Return strTime.Substring(0, 2) & ":" & strTime.Substring(2, 2) end function Next is my date variable where I am going to keep the date and time: dim dteEnd as date = date.today() dim strT as string = "345" 'For example Now I add the time: dteEnd = dteEnd.AddHours( Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(0).ToString())) ) And add the minutes dteEnd = dteEnd.AddMinutes( Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(1).ToString())) ) Is there a better way to do this? <g> Thanks, Saga
From: Family Tree Mike on 29 Apr 2010 17:11 On 4/29/2010 4:44 PM, Saga wrote: > I need to add the time a a date, specifically, the current date. > This seemed easy enough, but I found that thi wasn't so. > > As in input I get 3 or 4 digits representing the date. Valid > input string are: > > "0344", "1102", "456" > > The minutes are always 2 digits, but the hour can be either > 1 or 2 digits. > > What I did was first come up with a function to normalize > the input string which formats it hh:mm: > > private function sSetTime(byval strTime as string) as integer > > strTime = strTime.ToString("D4") > > Return strTime.Substring(0, 2)& ":"& strTime.Substring(2, 2) > > end function > > Next is my date variable where I am going to keep the date > and time: > > dim dteEnd as date = date.today() > dim strT as string = "345" 'For example > Now I add the time: > > dteEnd = dteEnd.AddHours( > Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(0).ToString())) > ) > > And add the minutes > > dteEnd = dteEnd.AddMinutes( > Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(1).ToString())) > ) > > Is there a better way to do this?<g> > Thanks, Saga > > "Better" is always debatable... Here is an example of a different approach: Sub Main() Dim s() As String = {"0324", "1234", "832"} Dim hhmm As Integer For Each s1 As String In s hhmm = Integer.Parse(s1) Dim h As Integer = hhmm \ 100 Dim m As Integer = hhmm Mod 100 Dim t As DateTime = DateTime.Today t = t.AddHours(h).AddMinutes(m) Console.WriteLine(t) Next Console.ReadKey() End Sub -- Mike
From: Saga on 29 Apr 2010 17:25 Thanks! This looks like a good approach. I can build a function that will return the date with the time added and use that. A question regarding your code. I noticed that you used > hhmm = Integer.Parse(s1) I typically use CInt(). Is there any advantage to using the integer parse method or disadvantage to uing cint()? Thanks Saga "Family Tree Mike" <FamilyTreeMike(a)ThisOldHouse.com> wrote in message news:eZlALC%235KHA.420(a)TK2MSFTNGP02.phx.gbl... > On 4/29/2010 4:44 PM, Saga wrote: >> I need to add the time a a date, specifically, the current date. >> This seemed easy enough, but I found that thi wasn't so. >> >> As in input I get 3 or 4 digits representing the date. Valid >> input string are: >> >> "0344", "1102", "456" >> >> The minutes are always 2 digits, but the hour can be either >> 1 or 2 digits. >> >> What I did was first come up with a function to normalize >> the input string which formats it hh:mm: >> >> private function sSetTime(byval strTime as string) as integer >> >> strTime = strTime.ToString("D4") >> >> Return strTime.Substring(0, 2)& ":"& strTime.Substring(2, 2) >> >> end function >> >> Next is my date variable where I am going to keep the date >> and time: >> >> dim dteEnd as date = date.today() >> dim strT as string = "345" 'For example >> Now I add the time: >> >> dteEnd = dteEnd.AddHours( >> >> Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(0).ToString())) >> ) >> >> And add the minutes >> >> dteEnd = dteEnd.AddMinutes( >> >> Convert.ToDouble(sSetTime(strT.Split(":".ToCharArray()).GetValue(1).ToString())) >> ) >> >> Is there a better way to do this?<g> >> Thanks, Saga >> >> > > "Better" is always debatable... Here is an example of a different > approach: > > Sub Main() > Dim s() As String = {"0324", "1234", "832"} > Dim hhmm As Integer > > For Each s1 As String In s > hhmm = Integer.Parse(s1) > > Dim h As Integer = hhmm \ 100 > Dim m As Integer = hhmm Mod 100 > > Dim t As DateTime = DateTime.Today > t = t.AddHours(h).AddMinutes(m) > Console.WriteLine(t) > Next > > Console.ReadKey() > End Sub > > -- > Mike
From: Family Tree Mike on 29 Apr 2010 17:39 On 4/29/2010 5:25 PM, Saga wrote: > Thanks! This looks like a good approach. I can build a function > that will return the date with the time added and use that. > A question regarding your code. I noticed that you used > >> hhmm = Integer.Parse(s1) > > I typically use CInt(). Is there any advantage to using the > integer parse method or disadvantage to uing cint()? Thanks > Saga > Just a personal preference, I believe. That said, I wrote that reply quickly, and the following way would be better: if (Integer.TryParse(s1, hhmm)) then ' do the datetime stuff end if TryParse returns true if the value in the string can be parsed as an integer. This would handle if the string "Noon" was passed in, returning false, so that it is skipped. -- Mike
From: Tom Shelton on 29 Apr 2010 17:39 On 2010-04-29, Saga <antiSpam(a)nowhere.com> wrote: > I need to add the time a a date, specifically, the current date. > This seemed easy enough, but I found that thi wasn't so. > > As in input I get 3 or 4 digits representing the date. Valid > input string are: > > "0344", "1102", "456" > > The minutes are always 2 digits, but the hour can be either > 1 or 2 digits. > > What I did was first come up with a function to normalize > the input string which formats it hh:mm: > If you don't use a 24 hour clock here (HHmm), then your not ever going to be able to distinguish between am and pm with out more information :). So, here is what I have assuming 24 hour clock... Option Explicit On Option Strict On Module Module1 Sub Main() Dim str() As String = {"1146", "0344", "442", "601", "1302", "2359"} Dim fmt As String = "MM/dd/yyyy HHmm" For Each t As String In str Dim cur As String = Date.Today.ToString("MM/dd/yyyy ") & String.Format("{0,4}", t).Replace(" ", "0") Dim d As Date Date.TryParseExact(cur, fmt, Nothing, Globalization.DateTimeStyles.None, d) Console.WriteLine(d) Next End Sub End Module -- Tom Shelton
|
Next
|
Last
Pages: 1 2 Prev: OLEDB v's Access's FE BE Connection Next: Need help printing multiple pages in VB.Net 2008 |