I found a way to (essentially) do this. I am having trouble with the Japanese calendar as of iOS 18.1 and I needed a similar solution. While we can't change what happens with [NSCalendar currentCalendar], I found a way to simply not use it. I made an NSCalendar category and added this:
+ (NSCalendar *)adjustedCalendar {
NSCalendar *cal = [NSCalendar currentCalendar];
if (cal.calendarIdentifier == NSCalendarIdentifierJapanese) {
cal = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
}
return cal;
}
Instead of calling currentCalendar, I call adjustedCalendar and it always gives me a Gregorian one.