Odeslat dotazOdeslat dotaz
 

OdpovědětChange system time using vb.net

Odpovědi

  • 31. října 2006 21:01ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    to get the system time:

    DateTime.Now

    returns back the current time. So you could say, place this on a timer on your form, and set the timer interval to say, 1 second (1000 ms's) then do, on the timer tick event:

    Me.theLabel.Text = DateTime.Now.ToString()

     

    this will keep the label updated every second of the current time the system has.

    if you create your own DateTime object, again using the approach above, you can then add 1 second to the DateTime object you created in your program. Example:

     

    Dim theCustomDateTime as DateTime = new DateTime(year, month, day, hour, minute, second) 'declare this globally

     

    'timer tick event:

    Me.theCustomDateTime = Me.theCustomDateTime.AddSeconds(1)

    Me.theLabel.Text = Me.theCustomDateTime.ToString()

     

    something more towards your area?

  • 1. listopadu 2006 19:01ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    well yes the above does it pretty much except you need to place the code in the right place. So declare a datetime object globally as shown. Then in your plus button, add 1 hour (for example) to the datetime object stored globally:

    Me.theDateTime = Me.theDateTime.AddHours(1)

    for minus button, do the same thing but do -1 instead to take away 1 hour. Same goes for minutes, seconds, milliseconds, days, months and years.

  • 1. listopadu 2006 20:16ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    its because you should be doing it this way, reassigning it back to the global variable as shown earlier:

    Me.theCustomDateTime = Me.theCustomDateTime.AddHours(1)

    Me.txthour.Text = Me.theCustomDateTime.ToString()

  • 1. listopadu 2006 20:30ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    the reason it shows the date is because thats what the ToString() does, it shows the date/time string of the datetime object. If you just want the hour, get the hour property:

    Me.theTextBox.Text = Me.theCustomDateTime.ToString("HH")

    or

    Me.theTextBox.Text = Me.theCustomDateTime.Hour.ToString()

     

    http://msdn2.microsoft.com/en-us/library/8kb3ddd4.aspx

  • 1. listopadu 2006 22:07ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    this would be done when initializing/constructing the global dateTime variable.

    Dim theCustomDateTime as DateTime = DateTime.Now 'gets the current datetime and assigns it to the variable (current year, current month, current day, current hour, current minute, current second, current millisecond)

    OR

    Dim theCustomDateTime as new DateTime(yourYearValueHere, yourMonthValueHere, yourDayValueHere)

    http://msdn2.microsoft.com/en-us/library/system.datetime.datetime.aspx

     

    does this help for this part?

    now for adding 1 to the year, the current way you have, its fine - you don't need to change any method for that, the buttons will work fine as shown in my example. All you need to worry about is creating the object globally, as shown above and set it to the values you want. Look at the constructor (see link) to see what values/parameters it takes to construct the object and initialize it with your values that you give it in the constructor.

  • 2. listopadu 2006 15:22ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    again, you need to read the link supplied. the 2006 you are giving is ticks, not the actual year value. ticks is the time rather/elapsed. you need to construct a PROPER year datetime which is done this way:

    private CustomDateTime as new DateTime(2006, yourMonthValue, yourDayValue)

    replace the bold text with whatever month and day value you want. This is how you create a proper datetime object which represents the proper date (day/month/year)

    if you do it the way you are right now, you are creating an instance of DateTime which holds the number of ticks. (Date and time elapsed in 100 nano second units)

Všechny reakce

  • 31. října 2006 16:00ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    indeed there is, try this:

    //create a structure:


    Structure SYSTEMTIME
    Public wYear As Short

    Public wMonth As Short

    Public wDayOfWeek As Short

    Public wDay As Short

    Public wHour As Short

    Public wMinute As Short

    Public wSecond As Short

    Public wMilliseconds As Short
    End
    Structure

     

     

    import the user32.dll (import the System.Runtime.InteropServices namespace):


    <DllImport("kernel32.dll", setLastError:=True)>public shared function SetSystemTime(byref theDateTime as SYSTEMTIME) as Boolean

    End Function


     

    finally, do the job:

     



    Dim newDateTime as SystemTime()
    newDateTime.wDay = valueHere
    if SetSystemTime(newDateTme) then
       'cool, we set it successfully
    end if

     

    does this help/work?

     

    once you create the Strucure instance, simply set the value you want to the date/time you like

  • 31. října 2006 16:26Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    I am not sure how to import the user32.dll
    I am not even sure what this is. I'm i declaring something??

    <DllImport("user32.dll", setLastError:=True)>public shared function SetSystemTime(byref theDateTime as SYSTEMTIME) as Boolean End Function
    i dont understand this line and where to put it.
  • 31. října 2006 16:33ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    indeed you are declaring it and thats how you import a dll/Win32 (also known as P/Invoke)

    this goes at the top of the class, just after public class form1 for example, the same applies for the structure decleration. Snippet:


    Public Class Form1
    Structure SYSTEMTIME
    Public wYear As Short

    Public wMonth As Short

    Public wDayOfWeek As Short

    Public wDay As Short

    Public wHour As Short

    Public wMinute As Short

    Public wSecond As Short

    Public wMilliseconds As Short
     

    End Structure

    <DllImport("kernel32.dll", setLastError:=True)> Public Shared Function SetSystemTime(ByRef theDateTime As SYSTEMTIME) As Boolean

    End Function
     
    private sub button1_Click(byval sender as object, byval e as EventArgs) handles button1.Click
     
    end sub
     
    'and so on


     

     

    edit: change user32 to kernel32

  • 31. října 2006 20:22Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    This is not doing what i want.
    what I want to do is connect the system time to my program
    i have a interface where the user can go in and click (for example: the + and - button to increase or decrease the number to change the hour and minutes.) I want them to be able to change the time and date as if they were doing it using the windows date and time properties. When they change the time in the program i want the system clock to also change accordingly. I know how write code to set the current date and time by clicking a button. I just need to know how to get the clock in the program with the ability to adjust the date and time.
    Any thoughts??
    Thanks!!

  • 31. října 2006 20:29ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    which program? As you may know, the code above does this, it sets the system date/time according to what ever you have set in the structure SYSTEMTIME. in regards to your program, what program is this? Something you have made or some other 3rd party software?

    I guess when you implemented say a numericupdown control, this could be, as an example, the day to set. Then you set this value to the structure wDay, and you do the same for the rest of the properties. Once done and they hit the button save, do the code above

  • 31. října 2006 20:47Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    It is not a third party program. I dont want to just click a button and the date and time is displayed. The program i am using is time orentied. The time in the program keeps up with the system time or whatever time u set it to. I want to be able to edit the time through a form in my program. NOT just click a button and set the current date and time. I want what i stated in my previous post.
  • 31. října 2006 21:01ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    to get the system time:

    DateTime.Now

    returns back the current time. So you could say, place this on a timer on your form, and set the timer interval to say, 1 second (1000 ms's) then do, on the timer tick event:

    Me.theLabel.Text = DateTime.Now.ToString()

     

    this will keep the label updated every second of the current time the system has.

    if you create your own DateTime object, again using the approach above, you can then add 1 second to the DateTime object you created in your program. Example:

     

    Dim theCustomDateTime as DateTime = new DateTime(year, month, day, hour, minute, second) 'declare this globally

     

    'timer tick event:

    Me.theCustomDateTime = Me.theCustomDateTime.AddSeconds(1)

    Me.theLabel.Text = Me.theCustomDateTime.ToString()

     

    something more towards your area?

  • 1. listopadu 2006 17:05Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    I dont think you are exactly reading my post.
    I dont just want the time on the form
    I have several buttons. ex. first button has a plus sign, second button has a minus sign. when i click on the button with the plus sign it should increase the hour or minute by 1. It is just as if i was setting the time on the pc clock. I hope this is clear.
    Thanks!!
  • 1. listopadu 2006 19:01ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    well yes the above does it pretty much except you need to place the code in the right place. So declare a datetime object globally as shown. Then in your plus button, add 1 hour (for example) to the datetime object stored globally:

    Me.theDateTime = Me.theDateTime.AddHours(1)

    for minus button, do the same thing but do -1 instead to take away 1 hour. Same goes for minutes, seconds, milliseconds, days, months and years.

  • 1. listopadu 2006 19:56Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    when i do the global declare of Public theCustomDateTime As DateTime = New DateTime(Year, Month, Day, Hour, Minute, Second) like you suggested it gives me this message.

    Argument not specified for parameter 'DateValue' of 'Public Function year (DateValue as Date) as integer'


  • 1. listopadu 2006 20:00ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    :-) you need to replace the bold words as those are parameter values. In the IDE when you type code and you open the bracket "(", it will give you a tooltip explaining what overloads this class has, those overloads I put in here for you as an example. So if you just wanted to start from todays date/time then:

    Dim theCustomDateTime as DateTime = DateTime.Now

     

    and thats it! It will create a datetime object with the current time (system time) in a global variable. If you wanted to specify the year/month/day/hour/minute/second etc... then you fill in the appropriate parameter values:

    Dim theCustomDateTime As DateTime = New DateTime(2006, 11, 1, 02, 11, 30)

     

  • 1. listopadu 2006 20:11Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    here is what i have
    Global declared

    Public theCustomDateTime As DateTime = New DateTime(Today.Hour)

    i have a button and a textbox

    in the button code i have
    txthour.Text = theCustomDateTime.AddHours(1)

    when i click the button 1 displays in the textbox but when i click it again nothing happens. I want each time i click the button the hour increases by 1 and goes until 23. This should be changing the system clock so that whatever hour i put it as the system clock will change to that hour.
  • 1. listopadu 2006 20:16ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    its because you should be doing it this way, reassigning it back to the global variable as shown earlier:

    Me.theCustomDateTime = Me.theCustomDateTime.AddHours(1)

    Me.txthour.Text = Me.theCustomDateTime.ToString()

  • 1. listopadu 2006 20:25Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    ok, that works, but why does it also show the date in the box.
    All i want to appear in the box is just the hour of day.
  • 1. listopadu 2006 20:30ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    the reason it shows the date is because thats what the ToString() does, it shows the date/time string of the datetime object. If you just want the hour, get the hour property:

    Me.theTextBox.Text = Me.theCustomDateTime.ToString("HH")

    or

    Me.theTextBox.Text = Me.theCustomDateTime.Hour.ToString()

     

    http://msdn2.microsoft.com/en-us/library/8kb3ddd4.aspx

  • 1. listopadu 2006 20:52Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    Thanks for your help so far. I got the minute date and month to work but i cannot get the year to work. It seem to only count it if i start from 1, but i cannot start from 1 because we are in the year 2006. i want to start from 2006 and have it count by 1 but it does not work that way, it jumps from 2006 to 2007 to 4013, its like it is doubling the number.
    can you help??
    Thanks!!
  • 1. listopadu 2006 20:58ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    something must be wrong. can you show us the code for that? In fact, post the entire solution...I hope you are not adding values in the timer event....
  • 1. listopadu 2006 21:06Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    This is what i declared globally
     Public theCustomDateTime As DateTime = New DateTime(1)

    here is my code for the year
    Private Sub btnyear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnyear.Click
    theCustomDateTime = theCustomDateTime.AddYears(2006)
            txtyear.Text = theCustomDateTime.ToString("yyyy")

    this works fine for the month hour minute and date, i guess because i am starting from 1

    ALSO:
    when i do the (-1)
    it does not go all the way in reverse. I want it to go backwards all the way.
    for example:
    for the month which will go from 1-31
    when i do the minus i want it to go 31,30,29 etc.
    I hope that was clear.
  • 1. listopadu 2006 21:44ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    your not doing it correctly :-)

    you are adding 2006 to the existing years value in the btnYear click, so on every click it will jump up...as you are experiencing (1 + 2006 = 2007, then 2007 + 2006 = 4013...and so on, then next click: 4013 + 2006 = 6019...and so on)

    Now in regards to making it go back, what you had done, and suggested, is correct but I thought you wanted this to happen (or even adding) in the minus button whenever its pressed? So if minus button is pressed, then you take 1 away from the year or 1 away from the hour or 1 away from the minute or whatever it is you want to take the value 1 away from.

    original post:

    I have several buttons. ex. first button has a plus sign, second button has a minus sign. when i click on the button with the plus sign it should increase the hour or minute by 1.

     

    so as you have done, declare globally a DateTime object:

    private theCustomDateTime as new DateTime(1, 1, 1) 'year 1, month 1, day 1

     

    'timer tick event:

    private sub Timer1_Tick(byval sender as object, byval e as EventArgs) handles Timer.Tick

       Me.theTextBox.Text = Me.theCustomDateTime.ToString("yyyy") 'or whatever format you want to show to the textbox

    end sub

     

    plus button:

    private sub cmdPlus_Click(byval object as sender, byval e as EventArgs) handles cmdPlus.Click

       Me.theCustomDateTime = Me.theCustomDateTime.AddYears(1) 'add 1 year from the current year. pressing it, will increase the year

    end sub

     

    'minus button:

    private sub cmdMinus_Click(byval object as sender, byval e as EventArgs) handles cmdMinus.Click

       Me.theCustomDateTime = Me.theCustomDateTime.AddYears(-1) 'takes 1 away from the current year value, pressing it again will DECREASE the year

    end sub

     

    is this not what you are after? Sorry if this is not helping, im still confused

  • 1. listopadu 2006 22:01Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    I am not sure what you are saying about the timer tick event.
    However, i added a timer and in the event i put
    txtyears.text= thecustomdatetime.tostring("yyyy")
    and nothing happens.
    Lets forget about going back with the minus for the moment.
    What i really need to get working is the "year"
    How can i get the year to start from 2005 or 2006 or start it from wherever i want it to so that when i click the button it increase the year by 1. It works for the others like, month, minutes, hour etc.
  • 1. listopadu 2006 22:07ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    this would be done when initializing/constructing the global dateTime variable.

    Dim theCustomDateTime as DateTime = DateTime.Now 'gets the current datetime and assigns it to the variable (current year, current month, current day, current hour, current minute, current second, current millisecond)

    OR

    Dim theCustomDateTime as new DateTime(yourYearValueHere, yourMonthValueHere, yourDayValueHere)

    http://msdn2.microsoft.com/en-us/library/system.datetime.datetime.aspx

     

    does this help for this part?

    now for adding 1 to the year, the current way you have, its fine - you don't need to change any method for that, the buttons will work fine as shown in my example. All you need to worry about is creating the object globally, as shown above and set it to the values you want. Look at the constructor (see link) to see what values/parameters it takes to construct the object and initialize it with your values that you give it in the constructor.

  • 2. listopadu 2006 7:47Mekki Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     

    It seems that Microsoft did not provide us with a way by which we can control the system time programmatically.

    All the methods provided by Microsoft are “read only methods”. We can add subtract to the current system date. We have no way to change the system date/time and their format.

    It is very bad that to this by going to System32 !

    We need a .Net interface to perform such tasks!

     

  • 2. listopadu 2006 15:10Simone1 Uživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     
    The year still does not work.
    Here is how i declared globally:

    Public CustomDateTime As New DateTime(2006)
    Now, here is my code:

    Private Sub btnyear_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnyear.Click
         
            CustomDateTime = CustomDateTime.AddYears(2006)
            txtyear.Text = CustomDateTime.ToString("yyyy")
        End Sub
    I tried it with both 1 and 2006. The 2006 does not work, when i click the button to make it go up one more year it does not move. However when i use 1 it works but i dont want to start from one because from 1 - 2006 is alot of clicks.
  • 2. listopadu 2006 15:22ahmedilyasMVP, ModerátorUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaileUživatelské medaile
     Odpovědět

    again, you need to read the link supplied. the 2006 you are giving is ticks, not the actual year value. ticks is the time rather/elapsed. you need to construct a PROPER year datetime which is done this way:

    private CustomDateTime as new DateTime(2006, yourMonthValue, yourDayValue)

    replace the bold text with whatever month and day value you want. This is how you create a proper datetime object which represents the proper date (day/month/year)

    if you do it the way you are right now, you are creating an instance of DateTime which holds the number of ticks. (Date and time elapsed in 100 nano second units)