У меня проблемы с переформатированием даты, чтобы показывать только .year
.month
и .day
.Выходные данные - это та же строка, которую я ввожу, но с hour
и minutes
, показывающими нули, и моя цель - получить только строку "yyyy-MM-dd"
, поскольку я буду использовать ее для получения CoreData
для записей.Если я использую этот формат даты, Xcode падает, потому что формат входящей даты - "yyyy-MM-dd HH:mm:ssZZZZ"
.Я следовал предложенному решению из Преобразовать строку в дату в Swift , но в некоторых случаях не работает.Как можно переформатировать дату?Как всегда большое спасибо.Вот функция:
func fetchBookings(date : String ) {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ssZZZZ"
// dateFormatter.dateFormat = "yyyy-MM-dd"
let dateFormatted = dateFormatter.date(from:date)!
let calendar = Calendar.current
let components = (calendar as NSCalendar).components([.year, .month,.day] , from: dateFormatted)
let dateToCheck = calendar.date(from: components)
let context = CoreData.databaseContext
let fetchRequest = NSFetchRequest<Booking>(entityName: "Booking")
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "bookingDate", ascending: true)]
let userPredicate = NSPredicate(format: "user.name == %@", UserDetails.fullName ?? "")
let datePredicate = NSPredicate(format: "bookingDate CONTAINS %@", dateToCheck! as CVarArg)
let andPredicate = NSCompoundPredicate(type: NSCompoundPredicate.LogicalType.and, subpredicates: [userPredicate, datePredicate])
fetchRequest.predicate = andPredicate
fetchedResultController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
do {
try fetchedResultController.performFetch()
print("##################### selectedDate in fetchBooking() is :\(self.selectedDate) ")
print(" bookings fetched")
print("booking date is: \(date)")
print("dateTocheck is: \(String(describing: dateToCheck!))")
print("today date is : \(Date())")
print("fetched objects are: \(String(describing: fetchedResultController.fetchedObjects))")
} catch {
print("Error fetching bookings :\(error)" )
}
}