Use TryParseExact (or ParseExact) and specify all of the format into an array string[] formats
string[] formats = { "yyyyMMdd HH:mm:ss", "ddMMyyyy HH:mm:ss",
"yyyy/MM/dd HH:mm:ss", "MM/dd/yyyy HH:mm:ss" }; //and so on, add more
string dtText = "01/31/2016 23:30:15"; //example
DateTime dt;
bool result = DateTime.TryParseExact(dtText, formats, CultureInfo.InvariantCulture,
DateTimeStyles.AssumeLocal, out dt);
Once you have this, then you could handle all the specified DateTime formats.
Important
Note that it is impossible for you to unify all possible DateTime formats since some of them are mutually exclusive:
Given an ambiguous case:
"12-12-2012"
and formats:
"dd-MM-yyyy"
"MM-dd-yyyy"
There can only be one format to be used among the two above.
That's why, it is good for you to customize for each project depending on your need.
If you want this to be reusable and customizable, I recommend you to create a master file (.txt or .xml) which stores all the DateTime formats which you might want to use in your projects.
masterdtformat.txt
"yyyy/MM/dd HH:mm:ss"
"yyyyMMdd HH:mm:ss"
"ddMMyyyy HH:mm:ss"
"MM/dd/yyyy HH:mm:ss"
"dd-MMM-yyyy HH:mm:ss"
//and so on...
Then, whenever you have a project, you simply need to take some formats from your master file to your particular project file. And in the project, you load that project file to give all the formats you need.
projectdtformat.txt
"yyyy/MM/dd HH:mm:ss"
"yyyyMMdd HH:mm:ss"
//suppose you only need two
This way, whatever format you have specified once, will be reusable. And the mechanism to provide valid DateTime formats for a given project will also be done quite easily by changing the project file.