An Arduino Uno doesn't have a Real Time Clock, but you could contact a NTP time server on the internet using the WiFi shield you mention, and get the time from there, and then keep track of time using millis(). Every so often, you should adjust the time with a new call to the NTP time server, because the Arduino's clock isn't all that accurate.
The easiest way would be to get a RTC module (I think the most accurate and still affordable at the moment are DS3231-based). They have a slot for a backup battery so they keep time even when there is no power supply.
Connect the module using I2C to your Arduino, install the appropriate library, and ask it every second (or however accurate you want to be) in your
loop() for the exact time.
These modules usually also have an interrupt pin and can generate an interrupt when an alarm time is reached; you could use that also.