It is helpful... but I don't think it answers my question. The primary question I had regarding DateTime had to do with DateTime.UtcNow. What appears to be happening is that DateTime.UtcNow (or DateTime.Now) is evaluated only when the rule is added. I wrote a compare rule specifying that the last accessed date had to be less than DateTime.UtcNow.Date, but let's say I wanted to record the LastAccessedTime. I think that DateTime.Now is being evaluated when the validation rule is added.
Consider the following:
1. Person record is pulled from database at 3:15:28.492 on a given day.
2. Validation rule is added when the Person record is created, and if I specify that the LastAccessedTime property must be less than DateTime.Now, I think DateTime.Now gets evaluated at that point (3:15:28.495, maybe).
3. Person record is modified, and LastAccessedTime is set to 3:15:28.502 - which should be exactly the same as DateTime.Now if DateTime.Now were evaluated at the same time that the validation rule is enforced.
4. Validation rule fails because LastAccessedTime is greater than what was DateTime.Now when the rule was added.
And now that I've gone through that rather lengthy explanation, maybe what you said does answer my question, because the usage of DateTime.Today in that example wouldn't be evaluated until the rule fires. Well, for the record, it seems like that's one class of rule that should be added to common rules. Other rules that we've been working on internally that we would eventually like to see added are recursive-property rules (validate that this.ShoppingCart.Items.Count > 2, for instance) and collection/list rules (at least one of these items must be xxx). I guess that's all from my end. If I haven't thought this out properly, please let me know.
Mark