KvadrantTimePicker

fun KvadrantTimePicker(value: KvadrantTime, onValueChange: (KvadrantTime) -> Unit, modifier: Modifier = Modifier, visible: Boolean = true, hourCycle: KvadrantHourCycle = KvadrantHourCycle.TwentyFour, minuteStep: Int = 1, meridiemNames: Pair<String, String> = "AM" to "PM", hourLabel: String? = null, minuteLabel: String? = null, visibleCount: Int = DEFAULT_VISIBLE, cyrillic: FontFamily? = null)

The same page with an hour and a minute on it, and a meridiem column when the cycle is twelve.

value is always on a 24-hour clock whatever hourCycle shows, because a control that returns "7" and a separate "PM" hands its caller two things to get wrong.

The cycle is a parameter and not derived, unlike the date's column order. The order has three discrete answers and a published source for each; whether a locale writes half past seven in the evening as 19:30 or 7:30 PM is a preference the operating system holds per user, not a property of the language, and Compose exposes nothing that answers it. A table would be inventing an answer rather than tabulating one. Twenty-four is the default because most of the world uses it.