如何正确地将佛教日期转换为格里高利日期

时间:2014-01-27 05:12:06

标签: ios nsdate

如何将 1月27日,2557 佛教日期转换为 2013年1月27日

是的,我知道如果我从2557减去543我将获得2014年。但是,我希望它使用NSDateFormatter来解决。

这是我的代码:

dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

 TimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setTimeZone:timeZone];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSS'Z'"];

// Buddhist date should be converted to Gregorian date. But the
// Date still in Buddhist form
NSDate *gregDate = [dateFormatter dateFromString:buddhistDate];

谢谢。

2 个答案:

答案 0 :(得分:2)

这几乎是来自Apple文档的复制/粘贴,只需稍加更改即可使用正确的日历类型。我将日期硬编码为您在示例中使用的值。

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:27];
[comps setMonth:1];
[comps setYear:2557];

NSCalendar *buddhist = [[NSCalendar alloc]
                         initWithCalendarIdentifier:NSBuddhistCalendar];
NSDate *date = [buddhist dateFromComponents:comps];

NSCalendar *gregorian = [[NSCalendar alloc]
                      initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSDayCalendarUnit | NSMonthCalendarUnit |
NSYearCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:date];

NSInteger day = [components day]; 
NSInteger month = [components month];
NSInteger year = [components year];

答案 1 :(得分:0)

创建公历的实例,然后使用NSDateFormatter进行格式化

let gregorianCalendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian)
let dateFormatter = NSDateFormatter()
dateFormatter.calendar = gregorianCalendar
dateFormatter.dateFormat = "dd/MM/yyyy HH:mm:ss"

print(dateFormatter.stringFromDate(NSDate()))