Index: ogr/ogrsf_frmts/shape/shape2ogr.cpp
===================================================================
--- ogr/ogrsf_frmts/shape/shape2ogr.cpp	(revision 1)
+++ ogr/ogrsf_frmts/shape/shape2ogr.cpp	(working copy)
@@ -877,24 +877,40 @@
                                                          iField ) );
             break;
 
-          case OFTDate:
-          {
-              OGRField sFld;
-              int nFullDate = 
-                  DBFReadIntegerAttribute( hDBF, iShape, iField );
-              
-              memset( &sFld, 0, sizeof(sFld) );
-              sFld.Date.Year = (GInt16)(nFullDate / 10000);
-              sFld.Date.Month = (GByte)((nFullDate / 100) % 100);
-              sFld.Date.Day = (GByte)(nFullDate % 100);
-              
-              poFeature->SetField( iField, &sFld );
-          }
+		  case OFTDate:          
+		  {               
+			OGRField sFld;
+			char szDelims[] = "/";	
+			char* pszDateValue = (char*)DBFReadStringAttribute(hDBF,iShape,iField);
+
+			memset( &sFld, 0, sizeof(sFld));
+			char **papszValuesTokens;
+			papszValuesTokens = CSLTokenizeStringComplex( pszDateValue, szDelims, FALSE,FALSE);\
+			int nTokenCount = CSLCount(papszValuesTokens);
+			if(nTokenCount == 3)
+			{
+			  sFld.Date.Month = (GByte)atoi(papszValuesTokens[0]);
+			  sFld.Date.Day   = (GByte)atoi(papszValuesTokens[1]);
+			  sFld.Date.Year  = (GInt16)atoi(papszValuesTokens[2]);
+			}
+			else 
+			{
+			  int nFullDate = atoi(pszDateValue);				  
+			  sFld.Date.Year = (GInt16)(nFullDate / 10000);
+			  sFld.Date.Month = (GByte)((nFullDate / 100) % 100);
+			  sFld.Date.Day = (GByte)(nFullDate % 100);
+			}
+			CSLDestroy( papszValuesTokens );
+
+			poFeature->SetField( iField, &sFld );
+
+		  }
           break;
 
           default:
             CPLAssert( FALSE );
         }
+
     }
 
     if( poFeature != NULL )

