Solved

make time out of string

Posted on 2014-01-09
9
235 Views
Last Modified: 2014-01-13
I have a database filled with 24 hr clock times in string format.
9:00  12:13  17:42  you get the picture.
Is there an easy way to get the time between 9:00 and 17:42
I can think of ways to split the string around the colon and then figure the elapsed time, but is there and easy way of doing it?  Obviously one can't subtract, because of the silly 60 minutes.

suggestions?

gary
0
Comment
Question by:javagair
  • 5
  • 4
9 Comments
 
LVL 24

Expert Comment

by:chaau
ID: 39769913
How about using System.DateTime for both times, and then subtract them. The Result will be a System.TimeSpan.

Here is a small example:
String dateStub = "2014-01-01 "
String strtime1 = "9:00"
String strtime2 = "17:00"
DateTime time1 = DateTime.ParseExact(dateStub + strtime1, "yyyy-MM-dd hh:mm", enUS, DateTimeStyles.None)
DateTime time2 = DateTime.ParseExact(dateStub + strtime2, "yyyy-MM-dd hh:mm", enUS, DateTimeStyles.None)
TimeSpan diff = time2 - time1
' then use diff.Hours and diff.Minutes to get the time difference

Open in new window

0
 

Author Comment

by:javagair
ID: 39772090
so you are just adding a random date to the time and then using the timespan to look only at the times?
good thinking I will try it

thanks

gary
0
 

Author Comment

by:javagair
ID: 39772179
the enUs is giving me a problem
imported systems.globalization which gave me the DateTimeStyles but enUS still has an error

gary
0
 
LVL 24

Expert Comment

by:chaau
ID: 39772544
You can use null in place of enUS, like this:
DateTime time2 = DateTime.ParseExact(dateStub + strtime2, "yyyy-MM-dd hh:mm", null, DateTimeStyles.None)

Open in new window

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 

Author Comment

by:javagair
ID: 39777594
If you put null in the expression, compiler says null is not defined, use system.dbnull which if you do compiler says type system can not be used in expression.
Null was defined in the old Vb, why not now?

datestub = "#2014-01-01 "    'I added the # seems to want one also tried it without the #
Dim cultures() As CultureInfo = {New CultureInfo("en-US")}
savestart = String.Copy(DataGridView1.Item(1, i).Value())  ' this is 8:00
Dim time1, time2, time3, time4 As DateTime  ' time1 defaults to #12:00 AM#

put in a break  on the next statement and run
 time1 = DateTime.ParseExact(datestub & savestart & " AM#", "yyyy-MM-dd hh:mm", cultures(0), DateTimeStyles.None)

so datestub is #2014-01-01 savestart is 8:00  
we end up with #2104-01-01 8:00 AM# or the same with the # and the AM removed.
I get the same message string is in wrong format.

gary
0
 
LVL 24

Expert Comment

by:chaau
ID: 39777644
Sorry, it is VB. You need to use Nothing instead of Null.

Anyway, try this (do not use hashes):
DateTime time2 = DateTime.ParseExact(dateStub + strtime2, "yyyy-MM-dd h:mm", CultureInfo.InvariantCulture)

Open in new window

The main thing here is a single "h" in the time format and "CultureInfo.InvariantCulture"
0
 

Author Comment

by:javagair
ID: 39777720
okay almost got it to work.
anytime greater than 12:00 give the invalid datetime error again.
if I change all times to less than 12 then everything is okay.
So it still does not understand Military time, 24 hr clock

thanks for everything

gary
0
 
LVL 24

Accepted Solution

by:
chaau earned 500 total points
ID: 39777787
Sorry, my mistake again. You needed to use Uppercase H. The lowercase h is for 12 hour format.
DateTime time2 = DateTime.ParseExact(dateStub + strtime2, "yyyy-MM-dd H:mm", CultureInfo.InvariantCulture)

Open in new window

                                           
BTW, if your hours have leading zero, like 08:24, then you need to use HH:
DateTime time2 = DateTime.ParseExact(dateStub + strtime2, "yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture)

Open in new window

0
 

Author Comment

by:javagair
ID: 39778015
thanks
should have noticed that.

works great.

gary
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Today is the age of broadband.  More and more people are going this route determined to experience the web and it’s multitude of services as quickly and painlessly as possible. Coupled with the move to broadband, people are experiencing the web via …
If you need to start windows update installation remotely or as a scheduled task you will find this very helpful.
Along with being a a promotional video for my three-day Annielytics Dashboard Seminor, this Micro Tutorial is an intro to Google Analytics API data.
In this video I am going to show you how to back up and restore Office 365 mailboxes using CodeTwo Backup for Office 365. Learn more about the tool used in this video here: http://www.codetwo.com/backup-for-office-365/ (http://www.codetwo.com/ba…

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

22 Experts available now in Live!

Get 1:1 Help Now