DATE

Top  Previous  Next

Action

Returns a date-value (String or 3 Bytes for Day, Month and Year) depending of the data type of the Target

 

 

Syntax

bDayMonthYear = Date(lSysSec)

bDayMonthYear = Date(lSysDay)

bDayMonthYear = Date(strDate)

 

strDate = Date(lSysSec)

strDate = Date(lSysDay)

strDate = Date(bDayMonthYear)

 

 

Remarks

StrDate

A Date-String in the format specified in the

CONFIG DATE statement

LsysSec

A LONG – variable which holds the System Second (SysSec = TimeStamp)

LsysDay

A WORD – variable, which holds then System Day (SysDay)

BDayMonthYear

A BYTE – variable, which holds Days, followed by Month (Byte) and Year (Byte). You can use a byte array, or 3 bytes dimensioned after each other.

 

 

Converting to String:

importantThe target string must have a length of at least 8 Bytes, otherwise SRAM after the target-string will be overwritten.

 

 

Converting to Soft clock date format (3 Bytes for Day, Month and Year):

 

Three Bytes for Day, Month and Year must follow each other in SRAM. The variable-name of the first Byte, the one for Day must be passed to the function.

 

 

See also

Date and Time Routines , DAYOFYEAR, SYSDAY

 

 

 

Example

'-----------------------------------------------------------------------------------------

'name                     : datetime_test1,bas

'copyright                : (c) 1995-2021, MCS Electronics

'purpose                  : show how to use the Date-Time routines from the DateTime.Lib

'micro                    : Mega103

'suited for demo          : no

'commercial addon needed  : no

'-----------------------------------------------------------------------------------------

 

$regfile = "m103def.dat"                                   ' specify the used micro

$crystal = 4000000                                         ' used crystal frequency

$baud = 19200                                               ' use baud rate

$hwstack = 32                                               ' default use 32 for the hardware stack

$swstack = 10                                               ' default use 10 for the SW stack

$framesize = 40                                             ' default use 40 for the frame space

 

Const Clockmode = 1

'use i2c for the clock

 

#if Clockmode = 1

Config Clock = Soft                                       ' we use build in clock

Disable Interrupts

#else

Config Clock = User                                       ' we use I2C for the clock

'configure the scl and sda pins

Config Sda = Portd.6

Config Scl = Portd.5

 

'address of ds1307

Const Ds1307w = &HD0                                     ' Addresses of Ds1307 clock

Const Ds1307r = &HD1

#endif

 

 

'configure the date format

Config Date = Ymd , Separator = -                         ' ANSI-Format

'This sample does not have the clock started so interrupts are not enabled

' Enable Interrupts

 

'dim the used variables

Dim Lvar1 As Long

Dim Mday As Byte

Dim Bweekday As Byte , Strweekday As String * 10

Dim Strdate As String * 8

Dim Strtime As String * 8

Dim Bsec As Byte , Bmin As Byte , Bhour As Byte

Dim Bday As Byte , Bmonth As Byte , Byear As Byte

Dim Lsecofday As Long

Dim Wsysday As Word

Dim Lsyssec As Long

Dim Wdayofyear As Word

 

 

 

 

' =================== DayOfWeek =============================================

' Example 1 with internal RTC-Clock

 

_day = 4 : _month = 11 : _year = 2                         ' Load RTC-Clock for example - testing

Bweekday = Dayofweek()

Strweekday = Lookupstr(bweekday , Weekdays)

Print "Weekday-Number of " ; Date$ ; " is " ; Bweekday ; " = " ; Strweekday

 

 

' Example 2 with defined Clock - Bytes (Day / Month / Year)

Bday = 26 : Bmonth = 11 : Byear = 2

Bweekday = Dayofweek(bday)

Strweekday = Lookupstr(bweekday , Weekdays)

Strdate = Date(bday)

Print "Weekday-Number of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " is " ; Bweekday ; " (" ; Date(bday) ; ") = " ; Strweekday

 

 

' Example 3 with System Day

Wsysday = 2000                                             ' that is 2005-06-23

Bweekday = Dayofweek(wsysday)

Strweekday = Lookupstr(bweekday , Weekdays)

Print "Weekday-Number of System Day " ; Wsysday ; " (" ; Date(wsysday) ; ") is " ; Bweekday ; " = " ; Strweekday

 

 

 

' Example 4 with System Second

Lsyssec = 123456789                                         ' that is 2003-11-29 at 21:33:09

Bweekday = Dayofweek(lsyssec)

Strweekday = Lookupstr(bweekday , Weekdays)

Print "Weekday-Number of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Bweekday ; " = " ; Strweekday

 

 

 

 

' Example 5 with Date-String

Strdate = "04-11-02"                                       ' we have configured Date in ANSI

Bweekday = Dayofweek(strdate)

Strweekday = Lookupstr(bweekday , Weekdays)

Print "Weekday-Number of " ; Strdate ; " is " ; Bweekday ; " = " ; Strweekday

 

 

 

 

' ================= Second of Day =============================================

' Example 1 with internal RTC-Clock

_sec = 12 : _min = 30 : _hour = 18                         ' Load RTC-Clock for example - testing

 

Lsecofday = Secofday()

Print "Second of Day of " ; Time$ ; " is " ; Lsecofday

 

 

' Example 2 with defined Clock - Bytes (Second / Minute / Hour)

Bsec = 20 : Bmin = 1 : Bhour = 7

Lsecofday = Secofday(bsec)

Print "Second of Day of Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(bsec) ; ") is " ; Lsecofday

 

 

' Example 3 with System Second

Lsyssec = 1234456789

Lsecofday = Secofday(lsyssec)

Print "Second of Day of System Second " ; Lsyssec ; "(" ; Time(lsyssec) ; ") is " ; Lsecofday

 

 

' Example 4 with Time - String

Strtime = "04:58:37"

Lsecofday = Secofday(strtime)

Print "Second of Day of " ; Strtime ; " is " ; Lsecofday

 

 

 

' ================== System Second ============================================

 

' Example 1 with internal RTC-Clock

                        ' Load RTC-Clock for example - testing

_sec = 17 : _min = 35 : _hour = 8 : _day = 16 : _month = 4 : _year = 3

 

Lsyssec = Syssec()

Print "System Second of " ; Time$ ; " at " ; Date$ ; " is " ; Lsyssec

 

 

' Example 2 with with defined Clock - Bytes (Second, Minute, Hour, Day / Month / Year)

Bsec = 20 : Bmin = 1 : Bhour = 7 : Bday = 22 : Bmonth = 12 : Byear = 1

Lsyssec = Syssec(bsec)

Strtime = Time(bsec)

Strdate = Date(bday)

Print "System Second of " ; Strtime ; " at " ; Strdate ; " is " ; Lsyssec

 

 

' Example 3 with System Day

 

Wsysday = 2000

Lsyssec = Syssec(wsysday)

Print "System Second of System Day " ; Wsysday ; " (" ; Date(wsysday) ; " 00:00:00) is " ; Lsyssec

 

 

' Example 4 with Time and Date String

Strtime = "10:23:50"

Strdate = "02-11-29"                                       ' ANSI-Date

Lsyssec = Syssec(strtime , Strdate)

Print "System Second of " ; Strtime ; " at " ; Strdate ; " is " ; Lsyssec       ' 91880630

 

 

 

 

' ==================== Day Of Year =========================================

' Example 1 with internal RTC-Clock

_day = 20 : _month = 11 : _year = 2                         ' Load RTC-Clock for example - testing

Wdayofyear = Dayofyear()

Print "Day Of Year of " ; Date$ ; " is " ; Wdayofyear

 

 

' Example 2 with defined Clock - Bytes (Day / Month / Year)

Bday = 24 : Bmonth = 5 : Byear = 8

Wdayofyear = Dayofyear(bday)

Print "Day Of Year of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(bday) ; ") is " ; Wdayofyear

 

 

 

' Example 3 with Date - String

Strdate = "04-10-29"                                       ' we have configured ANSI Format

Wdayofyear = Dayofyear(strdate)

Print "Day Of Year of " ; Strdate ; " is " ; Wdayofyear

 

 

' Example 4 with System Second

 

Lsyssec = 123456789

Wdayofyear = Dayofyear(lsyssec)

Print "Day Of Year of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Wdayofyear

 

 

' Example 5 with System Day

Wsysday = 3000

Wdayofyear = Dayofyear(wsysday)

Print "Day Of Year of System Day " ; Wsysday ; " (" ; Date(wsysday) ; ") is " ; Wdayofyear

 

 

 

' =================== System Day ======================================

' Example 1 with internal RTC-Clock

_day = 20 : _month = 11 : _year = 2                         ' Load RTC-Clock for example - testing

Wsysday = Sysday()

Print "System Day of " ; Date$ ; " is " ; Wsysday

 

 

' Example 2 with defined Clock - Bytes (Day / Month / Year)

Bday = 24 : Bmonth = 5 : Byear = 8

Wsysday = Sysday(bday)

Print "System Day of Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(bday) ; ") is " ; Wsysday

 

 

' Example 3 with Date - String

Strdate = "04-10-29"

Wsysday = Sysday(strdate)

Print "System Day of " ; Strdate ; " is " ; Wsysday

 

' Example 4 with System Second

Lsyssec = 123456789

Wsysday = Sysday(lsyssec)

Print "System Day of System Second " ; Lsyssec ; " (" ; Date(lsyssec) ; ") is " ; Wsysday

 

 

 

' =================== Time ================================================

' Example 1: Converting defined Clock - Bytes (Second / Minute / Hour) to Time - String

Bsec = 20 : Bmin = 1 : Bhour = 7

Strtime = Time(bsec)

Print "Time values: Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " converted to string " ; Strtime

 

 

' Example 2: Converting System Second  to Time - String

Lsyssec = 123456789

Strtime = Time(lsyssec)

Print "Time of Systemsecond " ; Lsyssec ; " is " ; Strtime

 

 

' Example 3: Converting Second of Day to Time - String

Lsecofday = 12345

Strtime = Time(lsecofday)

Print "Time of Second of Day " ; Lsecofday ; " is " ; Strtime

 

 

' Example 4: Converting System Second to defined Clock - Bytes (Second / Minute / Hour)

 

Lsyssec = 123456789

Bsec = Time(lsyssec)

Print "System Second " ; Lsyssec ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(lsyssec) ; ")"

 

 

 

' Example 5: Converting Second of Day to defined Clock - Bytes (Second / Minute / Hour)

Lsecofday = 12345

Bsec = Time(lsecofday)

Print "Second of Day " ; Lsecofday ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour ; " (" ; Time(lsecofday) ; ")"

 

' Example 6: Converting Time-string to defined Clock - Bytes (Second / Minute / Hour)

Strtime = "07:33:12"

Bsec = Time(strtime)

Print "Time " ; Strtime ; " converted to Sec=" ; Bsec ; " Min=" ; Bmin ; " Hour=" ; Bhour

 

 

 

' ============================= Date ==========================================

 

' Example 1: Converting defined Clock - Bytes (Day / Month / Year) to Date - String

Bday = 29 : Bmonth = 4 : Byear = 12

Strdate = Date(bday)

Print "Dat values: Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " converted to string " ; Strdate

 

 

' Example 2: Converting from System Day to Date - String

Wsysday = 1234

Strdate = Date(wsysday)

Print "System Day " ; Wsysday ; " is " ; Strdate

 

 

' Example 3: Converting from System Second to Date String

Lsyssec = 123456789

Strdate = Date(lsyssec)

Print "System Second " ; Lsyssec ; " is " ; Strdate

 

 

' Example 4: Converting SystemDay to defined Clock - Bytes (Day / Month / Year)

 

Wsysday = 2000

Bday = Date(wsysday)

Print "System Day " ; Wsysday ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(wsysday) ; ")"

 

 

' Example 5: Converting Date - String to defined Clock - Bytes (Day / Month / Year)

Strdate = "04-08-31"

Bday = Date(strdate)

Print "Date " ; Strdate ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear

 

 

' Example 6: Converting System Second to defined Clock - Bytes (Day / Month / Year)

Lsyssec = 123456789

Bday = Date(lsyssec)

Print "System Second " ; Lsyssec ; " converted to Day=" ; Bday ; " Month=" ; Bmonth ; " Year=" ; Byear ; " (" ; Date(lsyssec) ; ")"

 

 

 

' ================ Second of Day elapsed

 

Lsecofday = Secofday()

_hour = _hour + 1

Lvar1 = Secelapsed(lsecofday)

Print Lvar1

 

Lsyssec = Syssec()

_day = _day + 1

Lvar1 = Syssecelapsed(lsyssec)

Print Lvar1

 

 

Looptest:

 

' Initialising for testing

_day = 1

_month = 1

_year = 1

_sec = 12

_min = 13

_hour = 14

 

 

 

Do

If _year > 50 Then

    Exit Do

End If

 

_sec = _sec + 7

If _sec > 59 Then

  Incr _min

   _sec = _sec - 60

End If

 

_min = _min + 2

If _min > 59 Then

  Incr _hour

   _min = _min - 60

End If

 

_hour = _hour + 1

If _hour > 23 Then

  Incr _day

   _hour = _hour - 24

End If

 

_day = _day + 1

 

 

If _day > 28 Then

  Select Case _month

      Case 1

         Mday = 31

      Case 2

         Mday = _year And &H03

        If Mday = 0 Then

            Mday = 29

        Else

            Mday = 28

        End If

      Case 3

         Mday = 31

      Case 4

         Mday = 30

      Case 5

         Mday = 31

      Case 6

         Mday = 30

      Case 7

         Mday = 31

      Case 8

         Mday = 31

      Case 9

         Mday = 30

      Case 10

         Mday = 31

      Case 11

         Mday = 30

      Case 12

         Mday = 31

  End Select

  If _day > Mday Then

      _day = _day - Mday

      Incr _month

      If _month > 12 Then

         _month = 1

        Incr _year

      End If

  End If

End If

If _year > 99 Then

  Exit Do

End If

 

Lsecofday = Secofday()

Lsyssec = Syssec()

Bweekday = Dayofweek()

Wdayofyear = Dayofyear()

Wsysday = Sysday()

 

 

Print Time$ ; " " ; Date$ ; " " ; Lsecofday ; " " ; Lsyssec ; " " ; Bweekday ; " " ; Wdayofyear ; " " ; Wsysday

 

 

Loop

End

 

 

'only when we use I2C for the clock we need to set the clock date time

#if Clockmode = 0

'called from datetime.lib

Dim Weekday As Byte

Getdatetime:

I2cstart                                                 ' Generate start code

I2cwbyte Ds1307w                                         ' send address

I2cwbyte 0                                               ' start address in 1307

 

I2cstart                                                 ' Generate start code

I2cwbyte Ds1307r                                         ' send address

I2crbyte _sec , Ack

I2crbyte _min , Ack                                     ' MINUTES

I2crbyte _hour , Ack                                     ' Hours

I2crbyte Weekday , Ack                                   ' Day of Week

I2crbyte _day , Ack                                     ' Day of Month

I2crbyte _month , Ack                                   ' Month of Year

I2crbyte _year , Nack                                   ' Year

I2cstop

_sec = Makedec(_sec) : _min = Makedec(_min) : _hour = Makedec(_hour)

_day = Makedec(_day) : _month = Makedec(_month) : _year = Makedec(_year)

Return

 

Setdate:

_day = Makebcd(_day) : _month = Makebcd(_month) : _year = Makebcd(_year)

I2cstart                                                 ' Generate start code

I2cwbyte Ds1307w                                         ' send address

I2cwbyte 4                                               ' starting address in 1307

I2cwbyte _day                                             ' Send Data to SECONDS

I2cwbyte _month                                           ' MINUTES

I2cwbyte _year                                           ' Hours

I2cstop

Return

 

Settime:

_sec = Makebcd(_sec) : _min = Makebcd(_min) : _hour = Makebcd(_hour)

I2cstart                                                 ' Generate start code

I2cwbyte Ds1307w                                         ' send address

I2cwbyte 0                                               ' starting address in 1307

I2cwbyte _sec                                             ' Send Data to SECONDS

I2cwbyte _min                                             ' MINUTES

I2cwbyte _hour                                           ' Hours

I2cstop

Return

 

#endif

 

 

Weekdays:

Data "Monday" , "Tuesday" , "Wednesday" , "Thursday" , "Friday" , "Saturday" , "Sunday"