diff --git a/activemq-cpp/src/main/decaf/util/Date.cpp b/activemq-cpp/src/main/decaf/util/Date.cpp
index f46ec25..616bba1 100644
--- a/activemq-cpp/src/main/decaf/util/Date.cpp
+++ b/activemq-cpp/src/main/decaf/util/Date.cpp
@@ -29,15 +29,15 @@
 using namespace decaf::lang::exceptions;
 
 ////////////////////////////////////////////////////////////////////////////////
-Date::Date() : time( System::currentTimeMillis() ) {
+Date::Date() : time(System::currentTimeMillis()) {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Date::Date( long long milliseconds ) : time(milliseconds) {
+Date::Date(long long milliseconds) : time(milliseconds) {
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Date::Date( const Date& source ) : time(0) {
+Date::Date(const Date& source) : time(0) {
     (*this) = source;
 }
 
@@ -51,37 +51,37 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-void Date::setTime( long long milliseconds ){
+void Date::setTime(long long milliseconds){
     this->time = milliseconds;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-bool Date::after( const Date& when ) const {
+bool Date::after(const Date& when) const {
     return time > when.time;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-bool Date::before( const Date& when ) const {
+bool Date::before(const Date& when) const {
     return time < when.time;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-Date& Date::operator= ( const Date& source ) {
+Date& Date::operator= (const Date& source) {
     this->time = source.time;
     return *this;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-bool Date::equals( const Date& when ) const {
+bool Date::equals(const Date& when) const {
     return time == when.time;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-int Date::compareTo( const Date& value ) const {
+int Date::compareTo(const Date& value) const {
 
-    if( this->time < value.time ) {
+    if (this->time < value.time) {
         return -1;
-    } else if( this->time > value.time ) {
+    } else if (this->time > value.time) {
         return 1;
     }
 
@@ -89,32 +89,32 @@
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-bool Date::operator==( const Date& value ) const {
-    return ( this->time == value.time );
+bool Date::operator==(const Date& value) const {
+    return (this->time == value.time);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
-bool Date::operator<( const Date& value ) const {
-    return ( this->time < value.time );
+bool Date::operator<(const Date& value) const {
+    return (this->time < value.time);
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 std::string Date::toString() const {
 
     apr_time_exp_t exploded;
-    char buffer[80] = {0};
+    char buffer[80] = { 0 };
     apr_size_t resultSize = 0;
 
     // dow mon dd hh:mm:ss zzz yyyy
     static char format[] = "%a %b %d %T %Z %Y";
 
     // Explode time to local time.
-    if( apr_time_exp_lt( &exploded, this->time ) != APR_SUCCESS ) {
+    if (apr_time_exp_lt(&exploded, this->time * 1000) != APR_SUCCESS) {
         return "";
     }
 
     // Now format the exploded time into our desired format.
-    if( apr_strftime( &buffer[0], &resultSize, sizeof(buffer) / sizeof(char), format, &exploded ) != APR_SUCCESS ) {
+    if (apr_strftime(&buffer[0], &resultSize, sizeof(buffer) / sizeof(char), format, &exploded) != APR_SUCCESS) {
         return "";
     }
 
diff --git a/activemq-cpp/src/main/decaf/util/Date.h b/activemq-cpp/src/main/decaf/util/Date.h
index edb57b7..84fe133 100644
--- a/activemq-cpp/src/main/decaf/util/Date.h
+++ b/activemq-cpp/src/main/decaf/util/Date.h
@@ -22,8 +22,8 @@
 #include <decaf/lang/Comparable.h>
 #include <string>
 
-namespace decaf{
-namespace util{
+namespace decaf {
+namespace util {
 
     /**
      * Wrapper class around a time value in milliseconds.  This
@@ -35,7 +35,7 @@
     private:
 
         /**
-         * The underlying time value in milliseconds�
+         * The underlying time value in milliseconds
          */
         long long time;
 
diff --git a/activemq-cpp/src/test/decaf/util/DateTest.cpp b/activemq-cpp/src/test/decaf/util/DateTest.cpp
index 0789037..9220845 100644
--- a/activemq-cpp/src/test/decaf/util/DateTest.cpp
+++ b/activemq-cpp/src/test/decaf/util/DateTest.cpp
@@ -29,37 +29,38 @@
 void DateTest::test() {
 
     Date date1;
-    CPPUNIT_ASSERT( date1.getTime() != 0 );
+    CPPUNIT_ASSERT(date1.getTime() != 0);
 
     decaf::lang::Thread::sleep(55);
 
     Date date2;
 
-    CPPUNIT_ASSERT( date1.before(date2) == true );
-    CPPUNIT_ASSERT( date1.after(date2) == false );
+    CPPUNIT_ASSERT(date1.before(date2) == true);
+    CPPUNIT_ASSERT(date1.after(date2) == false);
 
     Date date3 = date1;
 
     // Test Comparable interface
-    CPPUNIT_ASSERT( date1.equals( date3 ) == true );
-    CPPUNIT_ASSERT( date3.equals( date1 ) == true );
-    CPPUNIT_ASSERT( date1.equals( date2 ) == false );
-    CPPUNIT_ASSERT( date1.compareTo( date2 ) < 0 );
-    CPPUNIT_ASSERT( date2.compareTo( date1 ) > 0 );
-    CPPUNIT_ASSERT( date1.compareTo( date3 ) == 0 );
-    CPPUNIT_ASSERT( date3.compareTo( date1 ) == 0 );
-    CPPUNIT_ASSERT( date1 < date2 );
-    CPPUNIT_ASSERT( !( date2 < date1 ) );
-    CPPUNIT_ASSERT( !( date1 < date3 ) );
-    CPPUNIT_ASSERT( date3 == date1 );
-    CPPUNIT_ASSERT( date1 == date3 );
-    CPPUNIT_ASSERT( !( date1 == date2 ) );
+    CPPUNIT_ASSERT(date1.equals(date3) == true);
+    CPPUNIT_ASSERT(date3.equals(date1) == true);
+    CPPUNIT_ASSERT(date1.equals(date2) == false);
+    CPPUNIT_ASSERT(date1.compareTo(date2) < 0);
+    CPPUNIT_ASSERT(date2.compareTo(date1) > 0);
+    CPPUNIT_ASSERT(date1.compareTo(date3) == 0);
+    CPPUNIT_ASSERT(date3.compareTo(date1) == 0);
+    CPPUNIT_ASSERT(date1 < date2);
+    CPPUNIT_ASSERT(!(date2 < date1));
+    CPPUNIT_ASSERT(!(date1 < date3));
+    CPPUNIT_ASSERT(date3 == date1);
+    CPPUNIT_ASSERT(date1 == date3);
+    CPPUNIT_ASSERT(!(date1 == date2));
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 void DateTest::testToString() {
 
-    Date now;
-    CPPUNIT_ASSERT( now.toString() != "" );
-    CPPUNIT_ASSERT( now.toString().size() >= 20 );
+    Date now(1443038174960LL);
+    CPPUNIT_ASSERT(now.toString() != "");
+    CPPUNIT_ASSERT(now.toString().size() >= 20);
+    CPPUNIT_ASSERT_EQUAL(std::string("Wed Sep 23 15:56:14 EDT 2015"), now.toString());
 }
