Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

380
Visualizações
Swift DateComponentsFormatter elimina los ceros a la izquierda pero mantiene al menos un dígito en el lugar de los minutos

Estoy usando el siguiente DateComponentsFormatter en Swift:

 let formatter = DateComponentsFormatter() formatter.unitsStyle = .positional formatter.allowedUnits = [.hour, .minute, .second] formatter.zeroFormattingBehavior = [.default]

Esto produce resultados como 2:41 (durante 2 minutos y 41 segundos) y 08 (durante 8 segundos). Sin embargo, me gustaría mantener al menos un dígito en el lugar de los minutos, devolviendo 0:08 en lugar de 08. ¿Es esto posible con DateComponentsFormatter? Preferiría una solución que devuelva un resultado localizado.

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Sí. Esto se puede lograr fácilmente agregando un condicional ternario basado en el intervalo de tiempo al establecer las unidades permitidas por el formateador de componentes de fecha:


Xcode 11 • Swift 5.1

 extension Formatter { static let positional: DateComponentsFormatter = { let positional = DateComponentsFormatter() positional.unitsStyle = .positional positional.zeroFormattingBehavior = .pad return positional }() }

 extension TimeInterval { var positionalTime: String { Formatter.positional.allowedUnits = self >= 3600 ? [.hour, .minute, .second] : [.minute, .second] let string = Formatter.positional.string(from: self)! return string.hasPrefix("0") && string.count > 4 ? .init(string.dropFirst()) : string } }

Uso

 8.0.positionalTime // "0:08" 161.0.positionalTime // "2:41" 3600.0.positionalTime // "1:00:00"
over 4 years ago · Santiago Trujillo Relatório

0

Se me ocurrió esta solución, empleando una expresión regular, que aparentemente cubre todos los casos:

 let formatter = DateComponentsFormatter() formatter.allowedUnits = [.hour, .minute, .second] formatter.unitsStyle = .positional formatter.zeroFormattingBehavior = .pad func durationString(for duration: TimeInterval) -> String { formatter.string(from: duration)! .replacingOccurrences(of: #"^00[:.]0?|^0"#, with: "", options: .regularExpression) } durationString(for: 0) // 0:00 durationString(for: 1) // 0:01 durationString(for: 10) // 0:10 durationString(for: 60) // 1:00 durationString(for: 600) // 10:00 durationString(for: 3600) // 1:00:00 durationString(for: 36000) // 10:00:00
over 4 years ago · Santiago Trujillo Relatório

0

Consulte un valor de propiedad zeroFormattingBehavior diferente. Utilizo esto para obtener el resultado que creo que estás buscando, pero experimenta según sea necesario...

 formatter.zeroFormattingBehavior = [.pad]
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda