I know this is an old question, but the problem is not going away soon. CSV files are easy to generate from most programming languages, rather small, human-readable in a crunch with a plain text editor, and ubiquitous.
The problem is not only with dates in text fields, but anything numeric also gets converted from text to numbers. A couple of examples where this is problematic is with ZIP/postal codes, telephone numbers, and government ID numbers, which sometimes can start with one or more zeroes (0), which get thrown away when converted to numeric.
Two cases that I can think of that the "prepending =" solution, as mentioned previously, might not be ideal is where the file might be imported into a program other than MS Excel (MS Word Mail Merge comes to mind) or where human-readability might be important.
What I have figured out is that if one pre/appends a non-numeric and/or non-date character in the value, the value will be recognized as text and not converted. However, the plain old space character doesn't work for this as it gets chopped off by Excel and then the value still gets converted. But there are various other printing and non-printing space characters that will work well. The easiest however is to append (add after) the simple tab character (\t, ASCII 9). It doesn't bother the importation, normally does not bother Mail Merge results, is not a big hindrance when viewing the CSV in Notepad, and could be removed by find/replace in Excel. You don't need to import the CSV, but can simply double-click to open the CSV.
Another option might be to generate XML files, for which a certain format also is accepted for import by newer MS Excel versions, and which allows a lot more options similar to .XLS format, but I don't have experience with this.
So there are various options. Depending on your requirements/application, one might be better than another.