by Michael S. Kaplan, published on 2010/02/22 07:01 -05:00, original URI: http://blogs.msdn.com/b/michkap/archive/2010/02/22/9967111.aspx
Calendar support in Microsoft products.
Sigh....
Within the first few months of this Blog, I wrote Calendars on Win32 -- Not all there yet and Calendars on Win32 -- just there for show...., followed just 8 days later by the first managed foray into the topic (Calendars.NET -- new platform, new issues).
Occasionally there was good news for Saudi Arabia or for Iranexpatriate Iranians or India or whatever.
But by and large the question I first posed to my very first manager in Windows almost a decade ago ("When can we make calendar support not stink?") remains largely unanswered.
Whether one targets the native side or the managed side, the fix would involve a hell of a lot of work - largely a rewrite for the former, largely a new class and a major refactoring for the latter (with the even larger question of how to support custom calendars that would have to somehow work in both environments left aside for another day).
Obviously I can't describe what the rewrite would need on the Windows side all that effectively since I can't really describes too much about the internals as they stand. So we'll table that one for now; I tend to doubt that there is much hope for that work being done, to be honest.
The former paragraph is my personal opinion about a kind of political situation, not at all a real technical issue.
But the managed world, I hold out more hope since there is a team over in the Developer Division that occasionally does some major work in this area.
The biggest piece of the work would be the refactoring - the current organization between DateTimeFormat, the various Calendar classes, and the parsing and formatting arms of DateTime is very poorly organized for the job of adding new calendars (you can use .Net Reflector to see some of this, you can probably just take it as read the huge dependency each class has on internal knowledge of the fixed tables in Microsoft's data that makes this such a Herculean task.
Here is my humble suggestion for someone who wanted to tackle the Calendar issue for .Net, as a step by step task-list:
Now this also "solves" the custom calendar issue for managed code, one way or the other. It leaves the Win32 case broken but that would definitely require resources elsewhere (I would love to see it but I'm not going to rely on it).
For the record this process above is just a more fully fleshed out version of the thing I first suggested almost five years ago in Calendars.NET -- new platform, new issues, but I'm hoping that the expanded information will inspire someone (or multiple someones!) to do the work and tell other people once it's done.
Plus note that if you do the Ethiopic calendar I mentioned the other day in The road not traveled (or, more to the point, the road not built) for Amharic, you can use the Ethiopic number system since you are the one doing all the parsing and formatting anyway - try exposing those Parse and Format methods too and help prove how easy it would have been for them to do it!
As I said above, let me know if you start doing all this, I'd love to see someone pick up the torch on this one since no one seems to be dong it yet and my former call to passion (opening it all up and getting out the way) is really wishing more could be done here, by someone. By anyone....
Peter Ibbotson on 22 Feb 2010 8:48 AM:
Sounds like you need to have a chat with Jon Skeet about noda time.
Michael S. Kaplan on 22 Feb 2010 9:46 AM:
Well it might be a little more complicated in that case, but I'd look over the specs (Neither Noda or Joda does the Amharic numbers!)....
John Cowan on 22 Feb 2010 10:02 AM:
Or you could just give the developers of NodaTime, an "idiomatic port" of JodaTime to .NET, a little boost.
Kemp on 22 Feb 2010 10:14 AM:
You seem to have a reference to footnote 1, but no footnote 1. My mind threw a parsing error ;-)
Michael S. Kaplan on 22 Feb 2010 11:27 AM:
I decided not to do that, but did not remove the footnote. Hope this helps with your parsing error!:-)
Jon Skeet on 22 Feb 2010 11:54 AM:
Michael: This is the first I've heard of Amharic numbers, but Joda Time does support the Ethiopic calendar:
http://joda-time.sourceforge.net/api-release/org/joda/time/chrono/EthiopicChronology.html
So Noda Time will eventually support that calendar too.
I doubt that we're up to coping with a new number system, but we could certainly talk about it.
If the BCL team wanted to take Noda Time into the BCL in some way, that could provide some, er, interesting challenges. I think for the moment it's best on its own as an open source project - that doesn't seem to have hurt Joda Time much. While we won't be able to change DateTime/DateTimeOffset themselves, we'll have our own *much* better types - which will of course have conversions to DateTime/DateTimeOffset if you really want...
Mail me (or the mailing list) if you're interested in finding out more...
Michael S. Kaplan on 22 Feb 2010 12:25 PM:
I'm guessing the BCL won't be picking up Noda Time any time soon. :-)
The numbering system is something that there is a true generation gap about but not doing it shouldn't mean not doing the calendar, so I'm glad you'll do it.
If folks here don't want to do it or can't then I'm happy to recommend someone who will do it, especially if it is easy enough to use with existing mechanisms (haven't looked at it yet or anything so can't say for sure)....
Brian on 23 Feb 2010 2:15 PM:
How about you get your management to commit Bala's team to do this feature?
Michael S. Kaplan on 23 Feb 2010 4:02 PM:
My management can't control their resources, thus my plea here. This was easy back in 2005 when I first suggested it too....
referenced by
2011/06/21 The downside of managing to go native...