Method to verify pass calculation

I am very new to orbital mechanics, so please forgive my ignorance.

I cobbled together a program that propagates and predicts ISS passes over a GeodeticPoint. The code is a slightly modified version of the VisibilityCheck example.

// Define the TLE lines
            static double MINIMUM_ELEVATION=5.0;
            String line1 = "1 25544U 98067A   24138.42237498  .00027365  00000-0  46131-3 0  9998";
            String line2 = "2 25544  51.6391 107.8732 0003463 176.7237 327.9829 15.51459620453778";
            TLE ISS = new TLE(line1, line2);

            final Frame earthFrame = FramesFactory.getITRF(IERSConventions.IERS_2010, true);
            final OneAxisEllipsoid earth = new OneAxisEllipsoid(Constants.WGS84_EARTH_EQUATORIAL_RADIUS, Constants.WGS84_EARTH_FLATTENING, earthFrame);
            // Create a propagator for the TLE
            Propagator propagator = TLEPropagator.selectExtrapolator(ISS);
            // Create a OneAxisEllipsoid representing Charlottesville, Virginia on the Earth.
            final TopocentricFrame charlottesville = new TopocentricFrame(
                    new GeodeticPoint(FastMath.toRadians(38.033554),
                    "Charlottesville, Virginia");

            // Event definition
                    new ElevationDetector(charlottesville)
                            .withHandler((state, detector, increasing) -> {
                                PVCoordinates pvCoordinates = state.getPVCoordinates(charlottesville);
                                GeodeticPoint geodeticPoint = earth.transform(pvCoordinates.getPosition(),charlottesville, state.getDate());
                                AbsoluteDate absoluteDate = state.getDate();
                                // Get the UTC time scale
                                TimeScale utc = TimeScalesFactory.getUTC();
                                // Convert AbsoluteDate to java.util.Date
                                Date javaDate = absoluteDate.toDate(utc);
                                format.setTimeZone(TimeZone.getTimeZone("America/New_York")); // Eastern Time Zone
                                System.out.println(" Visibility in " +
                                        ((ElevationDetector) detector).getTopocentricFrame().getName()+
                                        (increasing ? " begins at " : " ends at ") +
                                        state.getDate() + " EST --> " + format.format(javaDate)); // EST set above
                                return Action.CONTINUE;

What is the common approach to verify the output? I started by trying various websites, like ISS observation, but found discrepancies between my answers and theirs.

My output:

 Visibility in Charlottesville, Virginia begins at 2024-05-17T22:00:29.18284540112554Z EST --> 2024-05-17 18:00:29
 Visibility in Charlottesville, Virginia ends at 2024-05-17T22:07:46.9670707261505Z EST --> 2024-05-17 18:07:46
 Visibility in Charlottesville, Virginia begins at 2024-05-17T23:36:31.82789554732857Z EST --> 2024-05-17 19:36:31
 Visibility in Charlottesville, Virginia ends at 2024-05-17T23:44:41.62327277349316Z EST --> 2024-05-17 19:44:41
 Visibility in Charlottesville, Virginia begins at 2024-05-18T01:15:13.4493179168963Z EST --> 2024-05-17 21:15:13
 Visibility in Charlottesville, Virginia ends at 2024-05-18T01:20:47.90066133208612Z EST --> 2024-05-17 21:20:47
 Visibility in Charlottesville, Virginia begins at 2024-05-18T02:53:42.43462074453823Z EST --> 2024-05-17 22:53:42
 Visibility in Charlottesville, Virginia ends at 2024-05-18T02:58:14.50833703808722Z EST --> 2024-05-17 22:58:14
 Visibility in Charlottesville, Virginia begins at 2024-05-18T04:30:02.26832408538402Z EST --> 2024-05-18 00:30:02
 Visibility in Charlottesville, Virginia ends at 2024-05-18T04:37:19.35184886939213Z EST --> 2024-05-18 00:37:19
 Visibility in Charlottesville, Virginia begins at 2024-05-18T06:06:23.32776951470702Z EST --> 2024-05-18 02:06:23
 Visibility in Charlottesville, Virginia ends at 2024-05-18T06:14:41.08592220971671Z EST --> 2024-05-18 02:14:41

Is your MINIMUM_ELEVATION value the same as theirs?

Another point: do they consider atmospheric refraction or not? You can select several different refraction models in Orekit, here you didn’t select any.

That’s what I am looking for. The sites I use seem to hide information that I would need in order to make a good comparison/validation attempt.

Is there some more common approach I might be overlooking, some standard way to validate. My goal is to predict when things, not as common as the ISS, are passing directly overhead (nearly 90 degrees elevation), but want to increase my confidence level in the code.

If you have no clue about what they are using, I guess you can only try with several different settings like min elevation and refraction. Another point of discrepancy may be the Earth frame they use and the associated Earth Orientation Parameters you and they use. Did you update your orekit-data folder?
I didn’t look at the dates conversions you use for timezone, but the rest of the code seems legit to me.
Orekit is highly validated in this area.