Windows IT Pro is the authoritative and independent resource for windows nt, windows 2000, windows 2003, windows xp. Features a collection of resources and magazines for windows IT professionals.
  
  
  Advanced Search 


February 2001

A Primer About Dates


RSS
Subscribe to Windows IT Pro | See More Exchange Server and Outlook Articles Here | Reprints | Or get the Monthly Online Pass—only $5.95 a month!

Download the Code Here

[Editor's Note: The InstantDoc ID in the print version of Windows 2000 Magazine for downloading the code from Sue Mosher's "Taking Outlook to Task" March 2001 article was incorrect. To get to this article, click here. We apologize for any inconvenience this error might have caused.]

In the January 2001 Outlook VBA on Demand column, I talked about purging a folder's contents according to a user-supplied date. But what happens when users enter dates in different formats? To answer that question, I want to review a few important procedures and techniques related to dates in Microsoft Outlook programming—particularly how to enter dates.

What is a date? In the context of Outlook, a date is any built-in or custom property that uses the Date/Time data type. In addition to working with such properties, Outlook programs often need to get dates from users through InputBox() functions or controls on a form. How can you tell whether the user has entered a valid date?

Fortunately, Microsoft Visual Basic (VB) provides an IsDate() function that lets you test for a valid date. IsDate() takes any date or string expression as its argument and returns True if the expression represents a valid date between January 1, 100, and December 31, 9999. In the January column, I used IsDate() to make sure that the user provides a valid date in an InputBox pop-up window:

strResponse = InputBox(strMsg, strTitle)
If strResponse <> "" Or IsDate(strResponse) Then 

IsDate() is smart about handling dates in a variety of formats. Any of the following expressions returns True:

  • IsDate("3/31/01")
  • IsDate("31 Mar 2001")
  • IsDate("10:00")
  • IsDate(#3/31/01#)

You might wonder why IsDate("10:00") returns True. Remember that dates use the Date/Time data type, so a time component always exists, even if Outlook displays only the date.

If you've never worked with dates in VB or Microsoft Access, the expression IsDate(#3/31/01#) probably looks a little strange. The hash marks around the date are date quotes. Date quotes in date expressions are similar to regular quotation marks in string expressions—they inform the program unambiguously that the expression is a date, not a string or a calculation.

Compare the first and last expressions in the preceding list with IsDate(3/31/01). This expression, which contains a date surrounded by neither quotation marks nor hash marks, returns False. Because the argument isn't marked as a string or date, 3/31/01 acts as a numeric expression—3 divided by 31 divided by 1 (or about 0.0968). IsDate() correctly interprets the value as an unrecognizable date.

Another useful and versatile function is Format(), which converts various kinds of data into strings that use a specific format. In the January column, I used Format() to convert a user-entered date (strRestrict) into a string that displays the date in a specific format:

Format(strRestrict, "mmmm dd, yyyy")

For example, suppose a user enters the text 3/31/01 in the InputBox, setting the strRestrict variable. The above expression would return "March 31, 2001." The format is represented by "mmmm dd, yyyy", and you can build your own formats by combining elements that represent months, days, hours, minutes, and so on. For more information about the Format() function, see "User-Defined Date/Time Formats (Format Function)" in the VBA Help file.

For most purposes, though, you can use one of seven built-in named formats for dates, times, and date and time combined. The code you see in Listing 1 provides a convenient method to test the way any date or time appears. Run the code, then enter any date or time to see how the Format() function's named formats display it. I prefer the Medium Date format for many situations because it's both concise and unambiguous.

If you're building code that users in different countries might use, ambiguity is certainly a concern. People around the world use different formats for entering dates. Users set such preferences in the Control Panel Regional Options applet (which Figure 1 shows) or the Control Panel Settings applet, depending on which Windows version they use.

In particular, note the short date format. Most Americans would enter a March 7 date as 3/7/2001. But many Europeans, for example, would interpret that date as July 3, not March 7—they would enter the March 7 date as 7/3/2001. Format() understands these preferences and gets the date right every time. Figures 2 and 3 show the results of running the ShowDateFormats() subroutine on systems that have American English and French date preferences, respectively. In both cases, I entered 3/7/2001, but the French version shows the date as 3 juillet 2001 (i.e., July 3).

You've probably noticed that Outlook never leaves a date field blank. Instead, when a property doesn't have a specific date set, Outlook always displays the word None. The word None actually represents a specific date—1/1/4501. If you want to remove a date value from a date field and display None instead (e.g., you find that a particular task is open-ended and no longer has a due date), you can use one of the following statements, replacing the propname variable with the name of a specific built-in Outlook property, such as DueDate:

' for built-in properties
Item.propname = 
#1/1/4501#

' for custom properties
Item.UserProperties _
  ("MyDateField") = 
  #1/1/4501#

Now you know how to confirm that a user has entered a proper date, how to format dates in different ways, and how to set the special date that Outlook displays as None. These skills should help enhance any Outlook program you write that uses dates.

End of Article



Reader Comments
Is there anyway to cause a date field to change format if the sender has a different date format to the recipient? So I send June 3rd, 2002 as 06/03/2002, but the reciever, who has his date format as d/m, gets it as 03/06/2002.

C. M. May 20, 2002


C.M., the recipient isn't "getting" the date as 03/06/2002. It's just a display issue controlled by the user's Windows regional settings. The date will still mean June 3 to them.

Sue Mosher October 23, 2002


On using a simple VBA program to export Outlook appointment items to a vcs file, the times on the vcs items correspond to the times when viewed as an Outlook calendar.

However, when importing this vcs file back into Outlook, all summer items have one hour added to them to adjust for summer time. As far as I can seem the vCal specification allows for a switch DAYLIGHT:FALSE which, if I have understood it, should stop this happening – but it doesn’t seem to when I tried it.

Another approach might be to export all times as GMT times, which is what Microsoft appears indirectly to recommend - but I am not sure how one would code this in a simple fashion.

Any thoughts?

Hugh Meares July 01, 2004


Sue,
Reading your statement quoted below. Is there anyway to have a Date field display as blank instead of "None"? It is confusing to my users on some non-required date fields. Blank would be much better. I've been searching Google like crazy, but can't find a solution. Thanks!

[You've probably noticed that Outlook never leaves a date field blank. Instead, when a property doesn't have a specific date set, Outlook always displays the word None. The word None actually represents a specific date—1/1/4501.]

Anonymous User November 22, 2004 (Article Rating: )


I too would like to know how to make the date field show blank instead of "None"

Anonymous User February 27, 2005


You must log on before posting a comment.

If you don't have a username & password, please register now.




Top Viewed ArticlesView all articles
PsExec

This freeware utility lets you execute processes on a remote system and redirect output to the local system. ...

Command Prompt Tricks

One reader shares his tip for setting up the command prompt to reflect a remote path. ...

How can I stop and start services from the command line?

...


Exchange Server and Outlook Whitepapers Protecting (You and) Your Data with Exchange Server 2007

StoreVault SnapManagers for Microsoft Exchange and SQL Server

Related Events Storage Consolidation for Your Microsoft Applications: Reducing Cost and Complexity

The Myths & Truths of Email Management with SharePoint

Top 10 Email Security Challenges and Solutions

Check out our list of Free Email Newsletters!

Exchange Server and Outlook eBooks Spam Fighting and Email Security for the 21st Century

Understanding and Leveraging Code Signing Technologies

The Expert's Guide for Exchange 2003: Preparing for, Moving to, and Supporting Exchange Server 2003

Related Exchange Server and Outlook Resources Become a VIP member of the Windows IT Pro community!
Get it all with the VIP CD and VIP access. A $500+ value for only $279!

Subscribe to Windows IT Pro!
Solve your toughest technical problems with our experts and access 10,000 + articles online. 30% off

Monthly Online Pass - Only $5.95!
Get instant access to 10,000+ articles from Windows IT Pro Magazine!

TechNet Virtual Labs
Evaluate and test Microsoft's newest products.

Exchange & Outlook UPDATE eNewsletter
News, strategies, products, and developments in Exchange Server and Outlook messaging.

Windows IT Pro Home Register FAQ for Windows WinInfo News
Europe Edition About Us Contact Us/Customer Service Media Kit Affiliates / Licensing  
SQL Server Magazine Office & SharePoint Pro Windows Dev Pro IT Job Hound ITTV
IT Library Technology Resource Directory Connected Home Windows Excavator Windows SuperSite 
 
 Windows IT Pro is a Division of Penton Media Inc.
 Copyright © 2008 Penton Media, Inc., All rights reserved. Terms and Use | Privacy Statement | Reprints and Licensing