I believe the Uno has a resonator, not a crystal.
I read that the Arduino can't keep accurate time for a clock, losing seconds or minutes each day
You need to define some figures here. A resonator will have an error amount (say in ppm). So will a crystal. So will a 555 timer circuit. So will a real-time clock. Some RTCs are temperature-compensated, and thus more accurate.
What is the acceptable error amount? Don't say "zero" because you won't get that unless you own an atomic clock facility, and even that won't have a zero error amount.
If you need to feed some fish at 6 am, then the on-board resonator will be fine, they won't care if they are fed at 6:02 am.
One thing you can do is work out if the millis() figure is out by a fixed amount. For example, if it loses 10 seconds a day, just compensate for that in your calculations.
I believe that the chronometers that sailors used to use were accurate, not because they showed the right time, but because any error was a fixed
error. That is, the clock might be 5 seconds slow each day, but it was always
5 seconds slow. So the navigator would multiply the number of days since the clock was last calibrated, add/subtract that from the time shown, and have a pretty accurate idea of the current time.
Probably the most accurate time-keeping would be to spend $50 or so on a GPS module, and have it return the time-of-day, which it gets from the satellites, which I believe is pretty accurate.