- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
First?
Admin
Seconds!
Admin
Thrids? I love dates, but only when they're fresh.
Admin
These dates are beyond fresh. Putrid and rancid are two words that come to mind.
Admin
It looks like it is figuring out the number of days since the beginning of the month. There just might be a simpler way?
Admin
It's figuring whether the PaymentDate - October 5, 2016 - is more than 10 days from DateTme.Now. In PowerShell you'd do this
if ( ([DateTime]::new(2016,10,05) - [DateTime]::Now).Days -gt 10) { #Do true stuff here } else { #do False stuff here }
In C# it would be almost identical.
Admin
If I understand this correctly, it only works if the default date format of the current locale is in the form "day.month.year TimePortion", and its purpose is to find the number of days between two dates. Any locale that doesn't have "day" in the first position, that doesn't use "." as a date separator, or that doesn't use a space to separate the date and time portions will fail.
I've seen code like this submitted to a first-year Comp Sci course I was TA'ing.
Admin
Fixed the code...
return (Convert.ToDateTime("10/05/2016") - DateTime.Today).Days > 10;
Admin
The "Fixed code" does not do the same thing as the original code. For all you know, the return value is ignored by the caller and the console output is being parsed instead ... ;)
Admin
You don't understand the code correctly.
The purpose is to see if the payment date is more than 10 days from the current date. The date separator doesn't matter. When it splits on a period it is dropping the remainder of the P(payment date) - C(current date) to get the integer value.
Admin
For bonus WTF points, the Convert.ToInt32() throws a FormatException if run on 10/05/2016, since the "d." part of the TimeSpan.ToString() default format string is optional (so the output will be "00:00:00" which doesn't parse).
Admin
Today's lesson:
Time and date problems are HARD. Usually your platform of choice has functions that are well tested and do many of the functions you need.
USE THEM. Do not, repeat DO NOT attempt to make your own. They will fail in strange ways.
If your platform doesn't have said time and date functions, GET ANOTHER PLATFORM!
Admin
Oh, and as mentioned in the html comments, why the hard coded day. What's so special about May 10'th 2016???
The mind boggles.
Yazeran
Admin
No in c# it would be thus:
if(MyDate.Subtract(DateTime.Now.Date).Days > 10)
Admin
The hard coded date threw me off. Then I saw him convert to a string. I thought, "Oh, he's stripping the time... on a hard coded timeless value... okay... at least he does it for the DateTime.Now later on. Maybe it's an anti pattern." It's the wrong way to do it, but I've seen that before. Then, when he converts back to a DateTime, he calls the Date property! That's the correct way to strip the time! How the.... why the....
The rest is pure madness as far as I am concerned. I don't care if it actually does anything useful. Madness.
Admin
Also, are we sure he's trying to get the day? I mean, sure, the date in the string looks American, then he splits with a period. Dude might be from Kazakhstan for all we know.
Admin
"All the example datasets they gave me had that date, how should I know it's not always the same, I know nothing about the problem domain. I'm just trying to adjust for timezones and DST."
Admin
Seems like there's a lot of confusion in this thread. For the record, that split('.') DOES NOT have anything to do with the date objects.
What this idiot did, essentially, was: grab the current date and a hardcoded date, juggle them with a lot of unnecessary type conversions, strip away the time with that split(' ') , subtract one from the other, convert the result to string and use that split('.') to ignore the decimal part (because that's totally the correct way to take the integer part of a number, not using those silly round() or floor() math functions) and see if there were more than 10 days between both dates.
All that cruft just to check if DateA - DateB > 10 days. That's how moronic this code is.
If that wasn't bad enough I see dozens of ways this code can fail spectacularly. Changing from USA to SI date formats or the other way around are obvious but in several countries the decimal separator isn't a period either. Whoever wrote this code is either severely mentally challenged or a coder so awful that they shouldn't be allowed to touch a VCR, let alone a computer's keyboard.
Admin
TRWTF is the date format amiright?
Admin
TRWTF is the comment spam.
Admin
And good. Anyone who uses other date format than dd.mm.YYYY and 24h time system or uses imperial units is obviously an insane moron.