LSTM is meridian for your timezone. I live in US Central time, which is GMT - 6 hours. You'll need a variable or some other means of entering the local timezone offset in whole hours (which don't work everywhere).
int LSTM = 15 * timezone_offset_from_GMT;
From the DS1307 you'll need to calculate the day of year (doy), which for today is about 79.
float B = (360.0 / 365) * (doy - 81);
The value "B" is in degrees, which you must convert to radians by not starting in degrees in the first place ...
float B = ((2 * 3.1416) / 365) * (doy - 81);
Your calculator may work in degrees, but the C math library doesn't. The value "(2 * 3.1416)" is the number of radians in a circle -- it's like 360 degrees, only it's 2 * Pi radians.
Now you calculate the Equation of Time as
float EoT = 9.87 * sin(2 * B) - 7.53 * cos(B) - 1.5 * sin(B);
Once you have the EoT, you calculate the time correction. I live at 97W, which is -97 degrees and my LSTM is 90W, so
float TC = 4 * (longitude - LSTM) + EoT;
If you do the math for -97 degrees and where I live, that's about -34 minutes. Remember -- MINUTES.
Going back to your DS1307, you get the local time. Let's use 12 noon. At 12 noon, the local SOLAR time is actually 11:26 and it won't be 12 noon, local solar time, until is it 12:34 local time. That would be correct, except ... daylight saving time.
float LST = ds1307_time + (TC / 60);
if (is_daylight_savings)
LST -= 1;
Which means, when it is 12 noon Central Daylight Time here, it is actually 10:26 Local Solar Time.