Revision: 28371
          http://sourceforge.net/p/bibdesk/svn/28371
Author:   hofman
Date:     2023-09-23 15:30:32 +0000 (Sat, 23 Sep 2023)
Log Message:
-----------
Make sure Gregorian calendar is used for standard description of date. Use 
formatter to parse standard description date.

Modified Paths:
--------------
    trunk/bibdesk/BDSKCondition.m
    trunk/bibdesk/BibItem.m
    trunk/bibdesk/NSDate_BDSKExtensions.h
    trunk/bibdesk/NSDate_BDSKExtensions.m

Modified: trunk/bibdesk/BDSKCondition.m
===================================================================
--- trunk/bibdesk/BDSKCondition.m       2023-09-23 13:32:11 UTC (rev 28370)
+++ trunk/bibdesk/BDSKCondition.m       2023-09-23 15:30:32 UTC (rev 28371)
@@ -467,13 +467,13 @@
             case BDSKDate: 
             case BDSKAfterDate: 
             case BDSKBeforeDate: 
-                [self setDateValue:[NSDate dateWithString:newValue]];
+                [self setDateValue:[NSDate 
dateWithStandardDescription:newValue]];
                 break;
             case BDSKInDateRange:
                 values = [newValue componentsSeparatedByString:@" to "];
                 BDSKASSERT([values count] == 2);
-                [self setDateValue:[NSDate dateWithString:[values 
objectAtIndex:0]]];
-                [self setToDateValue:[NSDate dateWithString:[values 
objectAtIndex:1]]];
+                [self setDateValue:[NSDate dateWithStandardDescription:[values 
objectAtIndex:0]]];
+                [self setToDateValue:[NSDate 
dateWithStandardDescription:[values objectAtIndex:1]]];
                 break;
             default:
                 break;

Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m     2023-09-23 13:32:11 UTC (rev 28370)
+++ trunk/bibdesk/BibItem.m     2023-09-23 15:30:32 UTC (rev 28371)
@@ -4185,11 +4185,8 @@
                if ([NSString isEmptyString:dateAddedValue]) {
             [self setDateAdded:nil];
         } else {
-            theDate = [[NSDate alloc] initWithString:dateAddedValue];
-            if (theDate == nil)
-                theDate = [[NSDate 
dateWithNaturalLanguageString:dateAddedValue] retain];
+            theDate = [NSDate dateWithStandardDescription:dateAddedValue] ?: 
[NSDate dateWithNaturalLanguageString:dateAddedValue];
                        [self setDateAdded:theDate];
-            [theDate release];
                }
         
         NSString *dateModValue = [pubFields 
objectForKey:BDSKDateModifiedString];
@@ -4196,11 +4193,8 @@
         if ([NSString isEmptyString:dateModValue]) {
             [self setDateModified:nil];
         } else {
-            theDate = [[NSDate alloc] initWithString:dateModValue];
-            if (theDate == nil)
-                theDate = [[NSDate dateWithNaturalLanguageString:dateModValue] 
retain];
+            theDate = [NSDate dateWithStandardDescription:dateAddedValue] ?: 
[NSDate dateWithNaturalLanguageString:dateAddedValue];
             [self setDateModified:theDate];
-            [theDate release];
         }
     }
 }

Modified: trunk/bibdesk/NSDate_BDSKExtensions.h
===================================================================
--- trunk/bibdesk/NSDate_BDSKExtensions.h       2023-09-23 13:32:11 UTC (rev 
28370)
+++ trunk/bibdesk/NSDate_BDSKExtensions.h       2023-09-23 15:30:32 UTC (rev 
28371)
@@ -53,6 +53,8 @@
 + (NSDate *)dateWithMonth:(NSInteger)month year:(NSInteger)year;
 + (NSString *)formattedDateForMonth:(NSInteger)month year:(NSInteger)year;
 
++ (NSDate *)dateWithStandardDescription:(NSString *)string;
+
 - (NSString *)dateDescription;
 - (NSString *)longDateDescription;
 - (NSString *)mediumDateDescription;

Modified: trunk/bibdesk/NSDate_BDSKExtensions.m
===================================================================
--- trunk/bibdesk/NSDate_BDSKExtensions.m       2023-09-23 13:32:11 UTC (rev 
28370)
+++ trunk/bibdesk/NSDate_BDSKExtensions.m       2023-09-23 15:30:32 UTC (rev 
28371)
@@ -41,6 +41,7 @@
 #import "NSCharacterSet_BDSKExtensions.h"
 #import "BDSKComplexString.h"
 #import "BDSKStringNode.h"
+#import "NSString_BDSKExtensions.h"
 
 
 @implementation NSDate (BDSKExtensions)
@@ -64,10 +65,12 @@
 }
 
 + (NSInteger)yearFromString:(NSString *)yearString {
-    if([yearString isComplex])
+    if ([NSString isEmptyString:yearString])
+        return 0;
+    if ([yearString isComplex])
         yearString = [(BDSKStringNode *)[[yearString nodes] objectAtIndex:0] 
value];
     NSInteger year = [yearString integerValue];
-    if ([yearString length] <= 2)
+    if ([yearString length] == 2)
         year += year < 50 ? 2000 : 1900;
     return year;
 }
@@ -141,6 +144,18 @@
     return [NSString stringWithFormat:@"%ld", (long)year];
 }
 
++ (NSDate *)dateWithStandardDescription:(NSString *)string {
+    static NSDateFormatter *formatter = nil;
+    if (formatter == nil) {
+        formatter = [[NSDateFormatter alloc] init];
+        [formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
+        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
+        [formatter setCalendar:gregorianCalendar()];
+        [formatter setLenient:YES];
+    }
+    return [formatter dateFromString:string];
+}
+
 - (NSString *)dateDescription{
     // Saturday, March 24, 2001 (full date format)
     static NSDateFormatter *formatter = nil;
@@ -244,6 +259,7 @@
         formatter = [[NSDateFormatter alloc] init];
         [formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
         [formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss ZZZ"];
+        [formatter setCalendar:gregorianCalendar()];
     }
     return [formatter stringFromDate:self];
 }
@@ -255,6 +271,7 @@
         formatter = [[NSDateFormatter alloc] init];
         [formatter setFormatterBehavior:NSDateFormatterBehavior10_4];
         [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss ZZZ"];
+        [formatter setCalendar:gregorianCalendar()];
     }
     return [formatter stringFromDate:self];
 }

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to