I note a couple of things here, is EndTimeKey really a key? If so it may have an index on it, if so the speed (or lack thereof) will be updateing the index whilst also doing the actual update of the data, solution drop the index, run the update re-apply the index.
Another issue could be the transactional nature of Sql - as you do this update it will log every change so it can roll back in the event of a failure. This update looks to be pretty straightforward, so you could apply it in batches ie
update TableToUpdate setEndTimeKey = DATE_NOfrom Dates where EndTime = DATE
where TableToUpdateId between 1 and 100000
That will break your update into manageable size chunks - at the very least you'll get an idea how long each chunk will take.
Another option is putting an index on the EndTime column, potentially it's having to do a full table scan.
The real answer though is to look at the query plan being generated. As you can see there are many reasons why a query may run slow - these are just some quick ones to check.