Mac'te ay-gün yayın etiketi oluşturmak için, bu iki alanı Swift'in Foundation biçimlendiricisiyle isteyin ve yerel ayar onları sıralasın. Önce girişinizin bir takvim tarihi mi yoksa bir zaman damgası mı olduğunu belirleyin: bu, saat diliminin görüntülenen günü değiştirip değiştirmeyeceğini belirler.
Bu kılavuz, sentetik tarihlerden yayın etiketleri üretmek için küçük bir Terminal betiğinde yol gösterir. Ana işlem için Date.FormatStyle ve mevcut DateFormatter kodu için şablon tabanlı alternatifi kullanır. Apple, her iki yaklaşımı da yerelleştirilmiş tarih çıktısı için belgeler. Date.FormatStyle, DateFormatter
Ay ve günü bitmiş bir kalıp olarak değil, alan olarak isteyin
MMMM d gibi bir kalıp, ayı günün önüne sabitler. Yerelleştirilmiş bir alan isteği, nelerin dahil edileceğini belirtirken düzeni biçimlendiriciye bırakır. Swift'te ilgili ifade Date.FormatStyle().month(.wide).day()'dir. Apple, biçimlendirme değiştiricilerinin sırasının sonuç dizgisini etkilemediğini açıkça belirtir. .day()'yi önce çağırmak bu nedenle gün-önce çıktısını zorlamaz. Date.FormatStyle
Sentetik yayın tarihi 12 Kasım 2026 için, örnek etiketler en_US ile Kasım 12 ve en_GB ile 12 Kasım şeklindedir. Bunlar açık önizleme yerel ayarlarıdır; çalışan betik Ayrıca Mac'in mevcut yerel ayarını kullanarak bir etiket yazdırır. Apple, aynı ay-gün sıralama farkını yerelleştirilmiş şablon API'siyle gösterir. DateFormatter
Unicode, temel ayrımı tarih iskeletleri aracılığıyla açıklar: bunlar istenen alanları ve alan uzunluklarını içerir ve yazılım bunları uygun bir yerelleştirilmiş kalıpla eşleştirir. Örneğin, MMMd kısaltılmış ay ve gün ister. Bu, eğik çizgi, boşluk veya nihai görüntüleme sırasını belirlemez. Bu, API'ler arasında taşınması gereken faydalı bir prensiptir: bileşenleri seçin, ardından biçimlendirici etiketi birleştirmesine izin verin. Unicode Teknik Standardı #35, Bölüm 4: Tarihler
Yayın tarihinin neyi temsil ettiğine karar verin
Biçimlendirmeden önce, aşağıdaki satırlardan uygun olanı seçin. Bu karar, doğru bir biçimlendiricinin istenmeyen bir takvim gününü göstermesini engeller.
| Girdi | Anlamı | Biçimlendirme kararı |
|---|---|---|
Yıl 2026, ay 11, gün 12 |
Medeni bir tarih: belirli bir takvimdeki bir gün | Bu alanları koruyun; Date üzerinden köprü kurarken tutarlı bir takvim ve saat dilimi kullanın |
2026-11-12T00:30:00Z |
Bir anı tanımlayan zaman damgası | Anı ayrıştırın, ardından görüntülemek için saat dilimini seçin |
+02:00 |
UTC'den sayısal sapma | Yerel bir zaman damgasını UTC'ye bağlamak için yeterlidir; adlandırılmış bir bölgeyi tanımlamaz |
Europe/London |
Adlandırılmış saat dilimi tanıtıcısı | Görüntülenen an için kurallarını kullanın |
Apple, Date'i herhangi bir takvimden veya saat diliminden bağımsız bir zaman noktası olarak tanımlar. DateComponents, bir takvim ve saat dilimi kullanılarak değerlendirilen yıl, ay ve gün gibi alanları tutar. Sonuç olarak, sadece tarih içeren bir yayın kaydı, Date biçimlendiren bir API'ye geçirildiğinde açık bir dönüşüm kuralı gerektirir. Date, DateComponents
Bu görev için kural basittir: kaynak yıl, ay ve günü koruyun, UTC'de öğleden sonra 12:00'de bir Miladi tarih oluşturun ve aynı takvim ve UTC bölgesini kullanarak biçimlendirin. Öğleden sonra 12:00, bu örnek için sadece seçilmiş bir köprü noktasıdır. Oluşturma ve biçimlendirme tutarlılığını sağlamak tarihi korur. Köprü noktası gerçek bir yayın zamanını iddia etmez.
Gerçek bir zaman damgası için, yerine istenen görüntüleme bölgesini seçin. Yerel ayar sunumu kontrol eder; zaman damgasının istenen bölgesini sağlamaz. Adlandırılmış bir bölge, farklı anlarda farklı sapmalara sahip olabilirken, sabit sayısal sapma böyle kurallar sağlamaz. Apple, hem bölge tanıtıcılarını hem de tarihlerdeki sapma işlemlerini ortaya çıkarır. RFC 3339 zaman damgası sapmalarını tanımlar ve RFC 9557 bu temsilini, saat dilimi dahil ek bilgiler taşımak için genişletir. TimeZone, RFC 3339, RFC 9557
Terminal'de tamamlanmış ay-gün biçimlendiricisini çalıştırın
Burada kullanılan Date.FormatStyle başlatıcısı macOS 12'den itibaren kullanılabilir olarak belgelenmiştir. macOS 12 veya üzeri, bir Swift araç zinciri ve mevcut macOS SDK'sı ile kullanın. Swift'in resmi kurulum sayfası, Apple platform geliştirme için Xcode dahil Mac kurulum talimatlarını sağlar. Biçim-stili başlatıcı, Swift Kurulumu — macOS
Aşağıdaki tam programı düz metin editöründe MonthDay.swift olarak kaydedin. Kendi sentetik örnek verilerini içerir, takvim alanlarını doğrular ve mevcut-yerel ayar ve açık-yerel ayar önizlemelerini yazdırır. İki API'yi karşılaştırabilmeniz için eşdeğer şablon tabanlı sonucu da yazdırır.
import Foundation
enum LabelError: Error {
case unavailableUTC
case invalidPublicationDate
}
func main() throws {
guard let utc = TimeZone(secondsFromGMT: 0) else {
throw LabelError.unavailableUTC
}
var calendar = Calendar(identifier: .gregorian)
calendar.timeZone = utc
// Synthetic civil publication date, not an actual timestamp.
var fields = DateComponents()
fields.calendar = calendar
fields.timeZone = utc
fields.year = 2026
fields.month = 11
fields.day = 12
fields.hour = 12
guard fields.isValidDate(in: calendar),
let publicationDate = calendar.date(from: fields) else {
throw LabelError.invalidPublicationDate
}
let previews: [(String, Locale)] = [
("Current locale", .current),
("en_US", Locale(identifier: "en_US")),
("en_GB", Locale(identifier: "en_GB"))
]
for (name, locale) in previews {
let style = Date.FormatStyle(
locale: locale,
calendar: calendar,
timeZone: utc
)
.month(.wide)
.day()
print("\(name): \(publicationDate.formatted(style))")
let formatter = DateFormatter()
formatter.locale = locale
formatter.calendar = calendar
formatter.timeZone = utc
formatter.setLocalizedDateFormatFromTemplate("MMMMd")
print("\(name), template: \(formatter.string(from: publicationDate))")
}
}
try main()
Terminal uygulamasını açın, dosyayı içeren klasöre gidin ve swift MonthDay.swift komutunu çalıştırın. Swift araç zinciri kullanılamıyorsa, devam etmeden önce resmi Mac kurulum adımlarını tamamlayın. Bu örnek belgelerle karşılaştırıldı ancak Swift bu araştırma ortamında kullanılamadığı için çalıştırılmadı.
İki açık önizleme, aynı 12 Kasım tarihi için ay-önce ve gün-önce etiketlerini göstermelidir. Mevcut-yerel ayar satırı Mac'inizin mevcut yerel ayar ayarını izler. Her iki biçimlendirici yolu da yıl veya saat eklemeden tam ay adını ve günü ister. Çıktıyı yerelleştirilmiş görüntü metni olarak değerlendirin; belirli bir boşluk veya noktalama karakterine bağlı akış sonrası işlemlerden kaçının. Unicode'un kalıp eşleştirme modeli yerel ayara özgü düzenlere izin verir. Unicode Teknik Standardı #35, Bölüm 4: Tarihler
Bu programdaki Miladi takvim kasıtlıdır: sentetik kaynak alanları o takvimde tanımlanmıştır. Yerel ayar sunumu değiştikçe sabit kalır. Kaynak tarihleriniz farklı bir takvim kullanıyorsa, alanlarını o takvimi kullanarak yorumlayın ve ardından nasıl görüntüleneceğine karar verin. Apple'ın başlatıcısı, yerel ayar, takvim ve saat dilimini bu amaçla ayrı ayrı ortaya çıkarır. Biçim-stili başlatıcı
Mevcut DateFormatter kodunda yerelleştirilmiş şablon kullanın
Programdaki ikinci yol setLocalizedDateFormatFromTemplate("MMMMd")'u kullanır. Burada, MMMM tam ayı ve d ayın gününü ister. Dize, bir yerelleştirme yöntemine geçirilen bir şablondur; doğrudan nihai dateFormat olarak atanmaz. Apple'ın kendi örneği, farklı ay-gün sıralamaları üretmek için bu tam şablonu kullanır. DateFormatter
Şablon yöntemini çağırmadan önce locale'ü ayarlayın. Apple, yöntemin biçimi o noktadaki biçimlendiricinin yerel ayarını kullanarak çıkardığı için bu sıralamayı açıkça gerektirir. Daha sonra başka bir yerel ayar seçerseniz, şablon yöntemini tekrar çağırın. Örnek, her önizleme için yeni bir biçimlendirici oluşturarak bu bağımlılığı görünür kılar. setLocalizedDateFormatFromTemplate(_:)
Bu etiket görevi için, mevcut kodunuza uyan yolu seçin: modern Swift API'sinde alan değiştiricileri veya DateFormatter iş akışında yerelleştirilmiş şablon yöntemi. Kendi ayırıcınızla ayrı ayrı biçimlendirilmiş ay ve gün dizilerini birleştirmekten kaçının, çünkü bunu yapmak düzen sorumluluğunu tarih biçimlendiriciden alır.
Görevi istemeden değiştirmeden zaman damgalarını işleyin
Kaynak yerine sentetik zaman damgası 2026-11-12T00:30:00Z sağladığını varsayalım. Bu bir anı tanımlar. +00:00 sapmasında görüntülemek Kasım 12'yi verir; aynı anı -02:00 sapmasında görüntülemek 11 Kasım 22:30 verir. Bu, gözlemlenen bir yayın olayı değil, örnek bir sapma hesaplamasıdır. RFC 3339 sayısal sapmaları yerel saat eksi UTC olarak tanımlar. RFC 3339, bölüm 4.2
Böyle girişi, gerçek temsil için yapılandırılmış bir ISO 8601 API'siyle ayrıştırın, ardından elde edilen anı seçilen görüntüleme bölgesiyle biçimlendirin. Apple, RFC 3339 tarih-saat dizileri için ISO8601DateFormatter ve .withInternetDateTime seçeneğini belgeler. Bu seçenek, yerelleştirilmiş ay-gün çıkış isteğinden ayrı bir ayrıştırma yapılandırmasıdır. ISO8601DateFormatter formatOptions
Bu zaman damgası iş akışını, sadece medeni tarih sağlayan bir kaynağa, kasıtlı bir dönüşüm kuralı tanımlamadığınız sürece uygulaymayın. Benzer şekilde, Z ekinin yayının adlandırılmış saat dilimini tanımladığını varsaymayın. RFC 9557, adlandırılmış bölge bilgilerini temel zaman damgası temsili ötesindeki ek bilgi olarak değerlendirir. RFC 9557
Doğru Sıradaki Beklenmeyen Bir Etiketi Teşhis Edin
Hangi kararın değiştirilmesi gerektiğini belirlemek için bu sırayı kullanın:
- Gün yanlış: giriğin medeni bir tarih mi yoksa bir an mı olduğunu kontrol edin. Medeni tarih programı için, oluşturma ve biçimlendirmeyi UTC'de tutun. Bir an için, istenen görüntüleme bölgesini doğrulayın.
- Ay ve gün yanlış sırada görünüyor: biçimlendiriciye geçirilen yerel ayarı inceleyin ve doğrudan atanmış
dateFormatveya el ile birleştirilmiş dizgiler olup olmadığına bakın. - Değiştirici sırasını değiştirmenin etkisi yok: bu belgelenen bir davranıştır.
.month()ve.day()'u yeniden sıralamak yerine uygun yerel ayarı seçin. - Şablon çıktısı önceki düzeni koruyor: yeni yerel ayarı ayarlayın, ardından
setLocalizedDateFormatFromTemplateile biçimi yeniden oluşturun. - Kaynak alanları geçersiz: girişi bildirin veya düzeltin. Tam program, başka bir yayın tarihi yerine koymak yerine dönüştürmeden önce geçerliliği kontrol eder.
Bu kontroller, bir an, onun takvim yorumu ve yerelleştirilmiş sunumu arasındaki belgelenen ayrıma dayanır. Apple, ilgili API'lerde değiştirici-sırası bağımsızlığı, şablon kurulum sırası ve tarih bileşeni doğrulamasını belgeler. Date.FormatStyle, setLocalizedDateFormatFromTemplate(_:), DateComponents
Etiketi üretdikten sonra tam kaynak tarihi veya zaman damgasını saklayın. Ay-gün dizgisi kasıtlı olarak yılı hariç tutar ve biçimlendirilmiş bir zaman damgası etiketi de saati ve bölgesini hariç tutar; bu görüntü metni tam girişi koruyamaz. Güvenilir bir yayın etiketi için orijinal değeri saklayın, takvimi ve bölgeyi kasıtlı olarak seçin ve yerel ayarın istenen ay ve günü sıralamasına izin verin.
Kaynaklar
- Date.FormatStyle — Apple
- DateFormatter — Apple
- Unicode Teknik Standardı #35: Unicode Ortak Yerel Veri ve Kuralları, Bölüm 4: Tarihler — Unicode Consortium
- Date — Apple
- DateComponents — Apple
- TimeZone — Apple
- init(date:time:locale:calendar:timeZone:capitalizationContext:) — Apple
- setLocalizedDateFormatFromTemplate(_:) — Apple
- Swift Kurulumu — macOS — Swift.org
- ISO8601DateFormatter formatOptions — Apple
- RFC 3339: İnternet Üzerinde Tarih ve Saat: Zaman Damgaları — RFC Editor
- RFC 9557: İnternet Üzerinde Tarih ve Saat: Ek Bilgili Zaman Damgaları — RFC Editor