I’m a little confused. You have an openhab2 tag but your imports are only valid for OH 1.x. You no longer need to import org.joda.time.* and org.openhab.core.* no longer exists (they all moved to another package) and they are all imported by default now. I’m not positive but that could be the source of your problem.
Rules only have access to Items (with the one exception of event triggers which reference the event channel of a Thing). See my Time of Day Design Pattern for details.
I do exactly this sort of thing in Time of Day and I’m not seeing the same problem you are. The one difference might be I use restoreOnStartup on all my Items. So when the system is starting the Items are initialized to whatever they were when OH went down and my Astro populated times are populated even if the binding has yet to recalculate the current times. Perhaps that is why I did not see the same problem.
In OH 1 there used to be an Asto Action that would let you call into the binding and get the times. I don’t see it in OH 2. You could install the 1.9 Astro Binding and Action through the compatibility layer (NOT through PaperUI, I tested it awhile back, the action won’t work).
Personally I would just set up restoreOnStartup on these Items or add a Thread::sleep/Timer to put off calculating the values for a little bit.
Presumably you have another rule that repopulates nbDaylight based on the event triggers? Otherwise nbDaylight will only ever be what ever time is was when OH restarted/Astro recalculates the times, and not reflect the actual current time of day.
Again, I direct you to the Time of Day example for one way to implement what you are after.