It is possible to do this without restarting the game.
First of all you have to change the internal battery, but it's not enough.
When you install a new battery, the RTC (real time clock) restarts from 01/01/2000. The game keeps track of played hours, so if you (for example) have played for 10 years and then the battery died you should wait others 10 years to reach the "next day" in-game.
Fortunately this little homebrew software can resolve the problem. You can use either a GBA/GBA SP with a GBA flashcart (like EZ Flash Omega) or a DS/DS lite with a DS flashcart (like R4).
GBA VERSION:
Download rtcread.zip
Extract rtcread_mb.gba in the SD card of your GBA flashcart
Start rtcread_mb.gba then remove the flashcart from the GBA when it's prompt (without turning it off)
Insert your copy of Ruby/Sapphire/Emerald (the software should recognize the game)
Set date and time of today
Save
NDS VERSION
Download rtcread-ds.zip
Extract and copy rtcread-ds.nds in the SD card of your R4
Insert your Pokémon Ruby/Sapphire/Emerald in SLOT-2 and your R4 in SLOT-1 of your DS
Start rtcread-ds.nds from R4 menu and set date and time of today
Save