/* package whatever; // don't place package name! */
import java.text.DateFormat ;
import java.text.ParseException ;
import java.text.SimpleDateFormat ;
import java.util.ArrayList ;
import java.util.Date ;
import java.util.List ;
import java.util.Locale ;
import java.util.SimpleTimeZone ;
import java.util.TimeZone ;
/* The class name doesn't have to be Main, as long as the class is not public. */
class Main
{
public static final ThreadLocal< SimpleDateFormat> TFS_DATETIME_FORMATTER = new ThreadLocal< SimpleDateFormat> ( ) {
@Override
return dateFormat;
}
} ;
return parseDate
( dateString,
Locale .
getDefault ( ) ,
TimeZone .
getDefault ( ) ) ; }
@SuppressWarnings( "deprecation" )
dateString = dateString.replaceAll ( "(p|P)\\ .(m|M)\\ ." , "PM" ) .replaceAll ( "(a|A)\\ .(m|M)\\ ." , "AM" ) ;
try {
// Use the deprecated Date.parse method as this is very good at detecting
// dates commonly output by the US and UK standard locales of dotnet that
// are output by the Microsoft command line client.
date
= new Date ( Date .
parse ( dateString
) ) ; // ignore - parse failed.
}
if ( date == null ) {
// The old fashioned way did not work. Let's try it using a more
// complex alternative.
//DateFormat[] formats = createDateFormatsForLocaleAndTimeZone(locale, timezone);
DateFormat [ ] formats
= createDateFormatsForLocaleAndTimeZone
( locale, timezone
) ; return parseWithFormats( dateString, formats) ;
}
return date;
}
for ( int i = 0 ; i < formats.length ; i++ ) {
try {
return formats[ i] .parse ( input) ;
parseException = ex;
}
}
if ( parseException == null ) {
}
throw parseException;
}
/**
* Build an array of DateFormats that are commonly used for this locale
* and timezone.
*/
List< DateFormat> formats = new ArrayList< DateFormat> ( ) ;
addDateTimeFormatsToList( locale, timeZone, formats) ;
addDateFormatsToList( locale, timeZone, formats) ;
return formats.
toArray ( new DateFormat [ formats.
size ( ) ] ) ; }
public static void addDateFormatsToList
( Locale locale,
TimeZone timeZone, List
< DateFormat
> formats
) { df.setTimeZone ( timeZone) ;
formats.add ( df) ;
}
}
public static void addDateTimeFormatsToList
( Locale locale,
TimeZone timeZone, List
< DateFormat
> formats
) { if ( timeZone != null ) {
df.setTimeZone ( timeZone) ;
}
formats.add ( df) ;
}
}
}
{
String dateString
= new String ( "13. februar 2013 14:28:33" ) ; //Locale locale = Locale.getDefault();
//Date date2 = parseDate(dateString);
while ( ! ( str
= r.
readLine ( ) ) .
startsWith ( "42" ) ) System .
out .
println ( str
) ;
for ( int i = 0 ; i < locales.length ; i++ ) {
System .
out .
println ( locales
[ i
] .
getDisplayLanguage ( ) + "\t : " + s
) ; }
df.parse ( "13. februar 2013 14:28:33" ) ;
Date date3
= parseDate
( dateString, locale, timezone
) ;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudGV4dC5EYXRlRm9ybWF0OwppbXBvcnQgamF2YS50ZXh0LlBhcnNlRXhjZXB0aW9uOwppbXBvcnQgamF2YS50ZXh0LlNpbXBsZURhdGVGb3JtYXQ7CmltcG9ydCBqYXZhLnV0aWwuQXJyYXlMaXN0OwppbXBvcnQgamF2YS51dGlsLkRhdGU7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKaW1wb3J0IGphdmEudXRpbC5Mb2NhbGU7CmltcG9ydCBqYXZhLnV0aWwuU2ltcGxlVGltZVpvbmU7CmltcG9ydCBqYXZhLnV0aWwuVGltZVpvbmU7CgovKiBUaGUgY2xhc3MgbmFtZSBkb2Vzbid0IGhhdmUgdG8gYmUgTWFpbiwgYXMgbG9uZyBhcyB0aGUgY2xhc3MgaXMgbm90IHB1YmxpYy4gKi8KY2xhc3MgTWFpbgp7CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgZmluYWwgVGhyZWFkTG9jYWw8U2ltcGxlRGF0ZUZvcm1hdD4gVEZTX0RBVEVUSU1FX0ZPUk1BVFRFUiA9IG5ldyBUaHJlYWRMb2NhbDxTaW1wbGVEYXRlRm9ybWF0PigpIHsKICAgICAgICBAT3ZlcnJpZGUKICAgICAgICBwcm90ZWN0ZWQgU2ltcGxlRGF0ZUZvcm1hdCBpbml0aWFsVmFsdWUoKSB7CiAgICAgICAgICAgIFNpbXBsZURhdGVGb3JtYXQgZGF0ZUZvcm1hdCA9IG5ldyBTaW1wbGVEYXRlRm9ybWF0KCJ5eXl5LU1NLWRkJ1QnSEg6bW06c3MnWiciKTsKICAgICAgICAgICAgZGF0ZUZvcm1hdC5zZXRUaW1lWm9uZShuZXcgU2ltcGxlVGltZVpvbmUoMCwiR01UIikpOwogICAgICAgICAgICByZXR1cm4gZGF0ZUZvcm1hdDsKICAgICAgICB9CiAgICB9OwogICAgCiAgICBwdWJsaWMgc3RhdGljIERhdGUgcGFyc2VEYXRlKFN0cmluZyBkYXRlU3RyaW5nKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewogICAgICAgIHJldHVybiBwYXJzZURhdGUoZGF0ZVN0cmluZywgTG9jYWxlLmdldERlZmF1bHQoKSwgVGltZVpvbmUuZ2V0RGVmYXVsdCgpKTsKICAgIH0KICAgIAogICAgQFN1cHByZXNzV2FybmluZ3MoImRlcHJlY2F0aW9uIikKICAgIHB1YmxpYyBzdGF0aWMgRGF0ZSBwYXJzZURhdGUoU3RyaW5nIGRhdGVTdHJpbmcsIExvY2FsZSBsb2NhbGUsIFRpbWVab25lIHRpbWV6b25lKSB0aHJvd3MgUGFyc2VFeGNlcHRpb24gewogICAgICAgIERhdGUgZGF0ZSA9IG51bGw7CiAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcucmVwbGFjZUFsbCgiKHB8UClcXC4obXxNKVxcLiIsICJQTSIpLnJlcGxhY2VBbGwoIihhfEEpXFwuKG18TSlcXC4iLCAiQU0iKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyBVc2UgdGhlIGRlcHJlY2F0ZWQgRGF0ZS5wYXJzZSBtZXRob2QgYXMgdGhpcyBpcyB2ZXJ5IGdvb2QgYXQgZGV0ZWN0aW5nCiAgICAgICAgICAgIC8vIGRhdGVzIGNvbW1vbmx5IG91dHB1dCBieSB0aGUgVVMgYW5kIFVLIHN0YW5kYXJkIGxvY2FsZXMgb2YgZG90bmV0IHRoYXQKICAgICAgICAgICAgLy8gYXJlIG91dHB1dCBieSB0aGUgTWljcm9zb2Z0IGNvbW1hbmQgbGluZSBjbGllbnQuCiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLnBhcnNlKGRhdGVTdHJpbmcpKTsKICAgICAgICB9IGNhdGNoIChJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gZSkgewogICAgICAgICAgICAvLyBpZ25vcmUgLSBwYXJzZSBmYWlsZWQuCiAgICAgICAgfQogICAgICAgIGlmIChkYXRlID09IG51bGwpIHsKICAgICAgICAgICAgLy8gVGhlIG9sZCBmYXNoaW9uZWQgd2F5IGRpZCBub3Qgd29yay4gTGV0J3MgdHJ5IGl0IHVzaW5nIGEgbW9yZQogICAgICAgICAgICAvLyBjb21wbGV4IGFsdGVybmF0aXZlLgogICAgICAgICAgICAvL0RhdGVGb3JtYXRbXSBmb3JtYXRzID0gY3JlYXRlRGF0ZUZvcm1hdHNGb3JMb2NhbGVBbmRUaW1lWm9uZShsb2NhbGUsIHRpbWV6b25lKTsKICAgICAgICAgICAgRGF0ZUZvcm1hdFtdIGZvcm1hdHMgPSBjcmVhdGVEYXRlRm9ybWF0c0ZvckxvY2FsZUFuZFRpbWVab25lKGxvY2FsZSwgdGltZXpvbmUpOwogICAgICAgICAgICByZXR1cm4gcGFyc2VXaXRoRm9ybWF0cyhkYXRlU3RyaW5nLCBmb3JtYXRzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBEYXRlIHBhcnNlV2l0aEZvcm1hdHMoU3RyaW5nIGlucHV0LCBEYXRlRm9ybWF0W10gZm9ybWF0cykgdGhyb3dzIFBhcnNlRXhjZXB0aW9uIHsKICAgICAgICBQYXJzZUV4Y2VwdGlvbiBwYXJzZUV4Y2VwdGlvbiA9IG51bGw7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmb3JtYXRzLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybWF0c1tpXS5wYXJzZShpbnB1dCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uIGV4KSB7CiAgICAgICAgICAgICAgICBwYXJzZUV4Y2VwdGlvbiA9IGV4OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChwYXJzZUV4Y2VwdGlvbiA9PSBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24oIk5vIGRhdGVmb3JtYXRzIGZvdW5kIHRoYXQgY2FuIGJlIHVzZWQgZm9yIHBhcnNpbmcgJyIgKyBpbnB1dCArICInIik7CiAgICAgICAgfQogICAgICAgIHRocm93IHBhcnNlRXhjZXB0aW9uOwogICAgfQoKICAgIC8qKgoqIEJ1aWxkIGFuIGFycmF5IG9mIERhdGVGb3JtYXRzIHRoYXQgYXJlIGNvbW1vbmx5IHVzZWQgZm9yIHRoaXMgbG9jYWxlCiogYW5kIHRpbWV6b25lLgoqLwogICAgcHVibGljIHN0YXRpYyBEYXRlRm9ybWF0W10gY3JlYXRlRGF0ZUZvcm1hdHNGb3JMb2NhbGVBbmRUaW1lWm9uZShMb2NhbGUgbG9jYWxlLCBUaW1lWm9uZSB0aW1lWm9uZSkgewogICAgICAgIExpc3Q8RGF0ZUZvcm1hdD4gZm9ybWF0cyA9IG5ldyBBcnJheUxpc3Q8RGF0ZUZvcm1hdD4oKTsKCiAgICAgICAgYWRkRGF0ZVRpbWVGb3JtYXRzVG9MaXN0KGxvY2FsZSwgdGltZVpvbmUsIGZvcm1hdHMpOwogICAgICAgIGFkZERhdGVGb3JtYXRzVG9MaXN0KGxvY2FsZSwgdGltZVpvbmUsIGZvcm1hdHMpOwoKICAgICAgICByZXR1cm4gZm9ybWF0cy50b0FycmF5KG5ldyBEYXRlRm9ybWF0W2Zvcm1hdHMuc2l6ZSgpXSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZERhdGVGb3JtYXRzVG9MaXN0KExvY2FsZSBsb2NhbGUsIFRpbWVab25lIHRpbWVab25lLCBMaXN0PERhdGVGb3JtYXQ+IGZvcm1hdHMpIHsKICAgICAgICBmb3IgKGludCBkYXRlU3R5bGUgPSBEYXRlRm9ybWF0LkZVTEw7IGRhdGVTdHlsZSA8PSBEYXRlRm9ybWF0LlNIT1JUOyBkYXRlU3R5bGUrKykgewogICAgICAgICAgICBEYXRlRm9ybWF0IGRmID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoZGF0ZVN0eWxlLCBsb2NhbGUpOwogICAgICAgICAgICBkZi5zZXRUaW1lWm9uZSh0aW1lWm9uZSk7CiAgICAgICAgICAgIGZvcm1hdHMuYWRkKGRmKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyB2b2lkIGFkZERhdGVUaW1lRm9ybWF0c1RvTGlzdChMb2NhbGUgbG9jYWxlLCBUaW1lWm9uZSB0aW1lWm9uZSwgTGlzdDxEYXRlRm9ybWF0PiBmb3JtYXRzKSB7CiAgICAgICAgZm9yIChpbnQgZGF0ZVN0eWxlID0gRGF0ZUZvcm1hdC5GVUxMOyBkYXRlU3R5bGUgPD0gRGF0ZUZvcm1hdC5TSE9SVDsgZGF0ZVN0eWxlKyspIHsKICAgICAgICAgICAgZm9yIChpbnQgdGltZVN0eWxlID0gRGF0ZUZvcm1hdC5GVUxMOyB0aW1lU3R5bGUgPD0gRGF0ZUZvcm1hdC5TSE9SVDsgdGltZVN0eWxlKyspIHsKICAgICAgICAgICAgICAgIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoZGF0ZVN0eWxlLCB0aW1lU3R5bGUsIGxvY2FsZSk7CiAgICAgICAgICAgICAgICBpZiAodGltZVpvbmUgIT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIGRmLnNldFRpbWVab25lKHRpbWVab25lKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGZvcm1hdHMuYWRkKGRmKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIAogIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgogIHsKICAgIFN0cmluZyBkYXRlU3RyaW5nID0gbmV3IFN0cmluZygiMTMuIGZlYnJ1YXIgMjAxMyAxNDoyODozMyIpOyAKICAgIC8vTG9jYWxlIGxvY2FsZSA9IExvY2FsZS5nZXREZWZhdWx0KCk7CiAgICBMb2NhbGUgbG9jYWxlID0gbmV3IExvY2FsZSgibmIiKTsKICAgIFRpbWVab25lIHRpbWV6b25lID0gVGltZVpvbmUuZ2V0RGVmYXVsdCgpOwogICAgCiAgICAvL0RhdGUgZGF0ZTIgPSBwYXJzZURhdGUoZGF0ZVN0cmluZyk7CiAgICAgIAogICAgICAKICAgICBqYXZhLmlvLkJ1ZmZlcmVkUmVhZGVyIHIgPSBuZXcgamF2YS5pby5CdWZmZXJlZFJlYWRlciAobmV3IGphdmEuaW8uSW5wdXRTdHJlYW1SZWFkZXIgKFN5c3RlbS5pbikpOwogICAgIFN0cmluZyBzdHI7CiAgICAgd2hpbGUgKCEoc3RyPXIucmVhZExpbmUoKSkuc3RhcnRzV2l0aCgiNDIiKSkgU3lzdGVtLm91dC5wcmludGxuKHN0cik7CiAgICAgCiAgICAgCiAgICAgTG9jYWxlW10gbG9jYWxlcyA9IHtMb2NhbGUuVUssIExvY2FsZS5GUkFOQ0UsIExvY2FsZS5JVEFMSUFOLCBuZXcgTG9jYWxlKCJuYiIpfTsKICAgICAgICBEYXRlIGRhdGUgPSBuZXcgRGF0ZSgpOwogICAgICAgIFN0cmluZyBzOwogICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxvY2FsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgIHMgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0Lk1FRElVTSwgbG9jYWxlc1tpXSkuZm9ybWF0KGRhdGUpOwogICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4obG9jYWxlc1tpXS5nZXREaXNwbGF5TGFuZ3VhZ2UoKSArICJcdCA6ICIgKyBzKTsKICAgICAgICB9CiAgICAKICAgIERhdGVGb3JtYXQgZGYgPSBEYXRlRm9ybWF0LmdldERhdGVUaW1lSW5zdGFuY2UoRGF0ZUZvcm1hdC5GVUxMLCBEYXRlRm9ybWF0Lk1FRElVTSwgbmV3IExvY2FsZSgibmIiKSk7CiAgICBkZi5wYXJzZSgiMTMuIGZlYnJ1YXIgMjAxMyAxNDoyODozMyIpOwogICAgCiAgICBEYXRlIGRhdGUzID0gcGFyc2VEYXRlKGRhdGVTdHJpbmcsIGxvY2FsZSwgdGltZXpvbmUpOwogICAgCiAgICBTeXN0ZW0ub3V0LnByaW50bG4oRGF0ZUZvcm1hdC5nZXREYXRlVGltZUluc3RhbmNlKERhdGVGb3JtYXQuRlVMTCwgRGF0ZUZvcm1hdC5NRURJVU0sIG5ldyBMb2NhbGUoImVuIikpLmZvcm1hdChkYXRlMykpOwogIH0KfQ==