public DateTime(FickleFrostbite.FIT.DateTime dateTime)
     : this(dateTime.GetTimeStamp(), dateTime.GetFractionalTimeStamp())
 {
 }
        /// <summary>
        /// <para>Process the Activity items into Sql Tables</para>
        /// </summary>
        /// <param name="processActivity">The activity to be processed</param>
        /// <param name="garminToSqlEntities">The entity framework to process activities into</param>
        protected static void GarminToSqlProcessActivity(FickleFrostbite.TCX.Activity processActivity, FickleFrostbite.SQL.GarminToSqlEntities garminToSqlEntities)
        {
            /* check if there is a duplicate to be processed */
            var isDuplicate = (from a in garminToSqlEntities.Activities
                               where a.TcxActivityId == processActivity.Id
                               select a).Any();
            if (isDuplicate)
            {
                System.Console.WriteLine();
                System.Console.WriteLine("Activity " + processActivity.Id + " is a duplicate entry.");
            }
            else
            {
                /* process activity into SQL */
                System.Console.Write("   Processing " + processActivity.RowCount + " trackpoints: ");

                var processedItemCount = 0;
                var writeActivity = new FickleFrostbite.SQL.Activity();
                writeActivity.Sport = processActivity.Sport;
                writeActivity.TcxActivityId = processActivity.Id;
                garminToSqlEntities.Set<FickleFrostbite.SQL.Activity>().Add(writeActivity);
                foreach (var processLap in processActivity.Laps)
                {
                    var writeLap = new FickleFrostbite.SQL.Lap();
                    if (processLap.AverageHeartRateBpm != null) { writeLap.AverageHeartRateBpm = processLap.AverageHeartRateBpm.Value; }
                    writeLap.Calories = processLap.Calories;
                    writeLap.DistanceMeters = processLap.DistanceMeters;
                    if (processLap.MaximumHeartRateBpm != null) { writeLap.MaximumHeartRateBpm = processLap.MaximumHeartRateBpm.Value; }
                    writeLap.StartTime = processLap.StartTime;
                    writeLap.TotalTimeSeconds = processLap.TotalTimeSeconds;
                    writeLap.Activity = writeActivity;
                    garminToSqlEntities.Set<FickleFrostbite.SQL.Lap>().Add(writeLap);
                    foreach (var processTrackpoint in processLap.Track)
                    {
                        var writeTrackpoint = new FickleFrostbite.SQL.Trackpoint();
                        writeTrackpoint.AltitudeMeters = processTrackpoint.AltitudeMeters;
                        writeTrackpoint.DistanceMeters = processTrackpoint.DistanceMeters;
                        if (processTrackpoint.HeartRateBpm != null) { writeTrackpoint.HeartRateBpm = processTrackpoint.HeartRateBpm.Value; }
                        if (processTrackpoint.Position != null) { writeTrackpoint.LatitudeDegrees = processTrackpoint.Position.LatitudeDegrees; }
                        if (processTrackpoint.Position != null) { writeTrackpoint.LongitudeDegrees = processTrackpoint.Position.LongitudeDegrees; }
                        writeTrackpoint.Time = processTrackpoint.Time;
                        writeTrackpoint.Lap = writeLap;
                        garminToSqlEntities.Set<FickleFrostbite.SQL.Trackpoint>().Add(writeTrackpoint);
                        processedItemCount++;
                        if (processedItemCount % 500 == 0) { System.Console.Write(processedItemCount + ".."); }
                    }
                }
                garminToSqlEntities.SaveChanges();
                System.Console.WriteLine();
            }
        }