|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Adding time to dateThis 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 On 4/29/2010 4:44 PM, Saga wrote:
Show quoteHide quote > I need to add the time a a date, specifically, the current date. "Better" is always debatable... Here is an example of a different approach:> 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 > > 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 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 theinteger parse method or disadvantage to uing cint()? Thanks Saga Show quoteHide quote "Family Tree Mike" <FamilyTreeM***@ThisOldHouse.com> wrote in message news:eZlALC%235KHA.420@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 On 4/29/2010 5:25 PM, Saga wrote:
> Thanks! This looks like a good approach. I can build a function Just a personal preference, I believe. That said, I wrote that reply > 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 > 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 Thanks again. Saga
Show quoteHide quote "Family Tree Mike" <FamilyTreeM***@ThisOldHouse.com> wrote in message news:eo2i6R%235KHA.420@TK2MSFTNGP02.phx.gbl... > 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 Thanks for the addtional tip. In theory, all data has been
validated by the time it reaches this point, but I'll add this extra validation step just to be on the safe side. Saga Show quoteHide quote "Family Tree Mike" <FamilyTreeM***@ThisOldHouse.com> wrote in message news:eo2i6R%235KHA.420@TK2MSFTNGP02.phx.gbl... > 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 On 2010-04-29, Saga <antiSpam@nowhere.com> wrote:
Show quoteHide quote > I need to add the time a a date, specifically, the current date. If you don't use a 24 hour clock here (HHmm), then your not ever going to be> 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: > 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 On 2010-04-29, Tom Shelton <tom_shel***@comcastXXXXXXX.net> wrote:
Show quoteHide quote > On 2010-04-29, Saga <antiSpam@nowhere.com> wrote: Technically - you should be checking the return value of TryParseExact. It>> 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 > returns a Boolean value indicating if it was able to succesfully parse the string as a date or not :) -- Tom Shelton Thanks for your reply. You are correct in assuming that the
time data is in 24 hour format. Saga Show quoteHide quote "Tom Shelton" <tom_shel***@comcastXXXXXXX.net> wrote in message news:%23Lxv8R%235KHA.4940@TK2MSFTNGP05.phx.gbl... > On 2010-04-29, Saga <antiSpam@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
OLEDB v's Access's FE BE Connection
VB.NET Books and Training Material when is web browser control really complete ByVal copy a variable design pattern examples string split by first occurens number Re: How to send email with no outlook and SMTP server ? Is it possible with Linq to update a dataset? Math drawing question Determine depend on services |
|||||||||||||||||||||||