'How to make times ending `:00` accessible (e.g. 14:00)

Voice over reads the following NSStrings like so


14:15

"Fourteen fifteen."

This is clearly a time


14:00

"Fourteen."

This is ambiguous.


If the time 14:00 appears in the status bar it correctly reads it as

"Fourteen hundred hours"

How do I achieve this in a localised way?

iOS reading out correct time



Solution 1:[1]

How do I achieve this in a localised way?

Overriding the accessibilityLabel with the result of NSDateFormatter::localizedStringFromDate() will be the best thing to do because you can only rely upon iOS's own algorithm to handle any language.

The problem of doing it in a localised way is that it will depend on the language you want.

In French, for instance, you will never pronounce the :00, "14:00" will be read as quatorze heures ("fourteen hours"). "14:12" is "quatorze heures douze" (fourteen hours twelve, not "fourteen twelve")

In Spanish, even if reading 24 hours format, you will always read it on a 12 hours basis: "14:00" will be read as las dos de la tarde ("two in the afternoon") not talking about the distinction between "de la tarde" and "de la noche".

In both French or Spanish, you will never say hundred.

Solution 2:[2]

IMHO it's very easy ;-)

14:00 = Fourteen o'clock

Solution 3:[3]

extension Date {
    
    func accessibilityTime() -> String? {
        let dateComponents = Calendar.current.dateComponents([.hour,.minute], from: self)
        let formatter = DateComponentsFormatter()
        formatter.unitsStyle = .spellOut
        return formatter.string(for: dateComponents)
    }
}

this uses the spell-out unit using the DateComponentsFormatter to announce your time in a localised way. It does not fully implement as anyone on the street would say ("a quarter to three" will be announced as "fourteen o'clock and forty-five minutes"*) but it beats the "fourteen forty-five" announcement.

I hope this helps a lot of apps become more accessible for more people. :)

  • I have tried this using my native Dutch Language. For Dutch native speakers ("kwart voor drie" becomes "viertien uur en vijfenveertig minuten")

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 NetVicious
Solution 3 Lex