NSCalendar первый день недели

Как указано в других ответах, наборы представляют собой структуры данных (и математические концепции), которые не сохраняют порядок элементов -

Однако, используя комбинацию множеств и словарей, возможно, что вы можете добиваться того, что вы хотите - попробуйте использовать эти фрагменты:

# save the element order in a dict:
x_dict = dict(x,y for y, x in enumerate(my_list) )
x_set = set(my_list)
#perform desired set operations
...
#retrieve ordered list from the set:
new_list = [None] * len(new_set)
for element in new_set:
   new_list[x_dict[element]] = element
43
задан Joshua 12 July 2009 в 05:40
поделиться

7 ответов

Быстрое решение (примечание, используйте .yearForWeekOfYear, не .year):

let now = Date()
let cal = Calendar.current
var weekComponents = cal.dateComponents([.yearForWeekOfYear, .weekOfYear,
                                         .weekday], from: now)
//weekComponents.weekday = 1  // if your week starts on Sunday
weekComponents.weekday = 2  // if your week starts on Monday
cal.date(from: weekComponents) // returns date with first day of the week
0
ответ дан 26 November 2019 в 22:27
поделиться

Попробуйте следующее:

NSCalendar *yourCal = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]
[yourCal setFirstWeekday:0];
0
ответ дан 26 November 2019 в 22:27
поделиться

setFirstWeekday: в объекте NSCalendar. Устанавливает индекс первого дня недели для получателя.

- (void)setFirstWeekday:(NSUInteger)weekday

Должен помочь.

12
ответ дан 26 November 2019 в 22:27
поделиться

… есть ли календарь в котором в качестве первого дня недели уже указан понедельник, а не воскресенье.

Когда-нибудь будет.

-1
ответ дан 26 November 2019 в 22:27
поделиться

Я вижу недопонимание в других сообщениях. Первый день недели, какой бы он ни был, имеет номер 1, а не 0. По умолчанию воскресенье = 1, как в «Введение в руководство по программированию даты и времени для какао: календарные вычисления»:

«Значение дня недели для воскресенья в григорианском календаре. равно 1 "

Для понедельника как первого рабочего дня единственное средство, которое у меня есть, - это условие грубой силы для исправления вычислений

NSCalendar *cal=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *comps = [cal components:NSWeekdayCalendarUnit fromDate:[NSDate date]];
// set to 7 if it's Sunday otherwise decrease weekday number
NSInteger weekday=[comps weekday]==1?7:[comps weekday]-1; 
3
ответ дан 26 November 2019 в 22:27
поделиться

Этот код создает дату, установленную на понедельник текущей недели:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDate *today = [NSDate date];
NSDate *beginningOfWeek = nil;
BOOL ok = [gregorian rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek
                                interval:NULL forDate: today];
18
ответ дан 26 November 2019 в 22:27
поделиться

Я бы сказал, что проблема здесь:

SELECT DISTINCTROW `cost` INTO ld_cost FROM `prod_itemcost` WHERE id = ls_id;

и вызванная возвращением нескольких строк. То, как вы решите эту проблему, зависит от ваших требований. Означает ли существование нескольких строк, что база данных нуждается в некоторой уборке, например? Или следует взять первое значение «cost», или, возможно, сумма всех «cost» для предложения id = ls_id?

Edit:

Your INTO пытается записать несколько строк в одну переменную. Глядя на ваш SQL, я бы сказал, что основная проблема заключается в том, что ваш первоначальный запрос на возврат только последней стоимости для каждого ID наталкивается на дубликаты pceffdate. Если это так, то SQL:

SELECT DISTINCTROW `itemcode` ID, `mlist` COST
    FROM (SELECT `itemcode`, `pceffdate`, `mlist`
        FROM `purchcost` a
        where `pceffdate` = (SELECT MAX(z.`pceffdate`) FROM `purchcost` z WHERE z.`itemcode` = a.`itemcode`
        AND z.`pceffdate` <= TDATE)) tb

возвращает больше строк, чем это:

SELECT DISTINCTROW `itemcode` ID
    FROM (SELECT `itemcode`, `pceffdate`, `mlist`
        FROM `purchcost` a
        where `pceffdate` = (SELECT MAX(z.`pceffdate`) FROM `purchcost` z WHERE z.`itemcode` = a.`itemcode`
        AND z.`pceffdate` <= TDATE)) tb
-121--2224064-

C-M-f-forward-sexp

Это приведет вас в}, который соответствует {point is ion.

-121--3113803-

Iv выяснил способ отображения любого имени буднего дня с помощью nscalender.. с помощью следующего кода.. Просто откройте консоль из строки меню xcode, чтобы увидеть результаты. Скопируйте в метод viewDidLoad следующий код, чтобы получить первый день недели

NSDate *today = [NSDate date];
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"MM/dd/yyyy :EEEE"];
NSString *dateString = [dateFormat stringFromDate:today];
NSLog(@"date: %@", dateString);
[dateFormat release];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

NSDateComponents *components = [gregorian components:NSWeekdayCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit fromDate:today];
[components setDay:([components day]-([components weekday]-1))];

NSDate *beginningOfWeek = [gregorian dateFromComponents:components];
NSDateFormatter *dateFormat_first = [[NSDateFormatter alloc] init];
[dateFormat_first setDateFormat:@"MM/dd/yyyy :EEEE"];
NSString *dateString_first = [dateFormat_first stringFromDate:beginningOfWeek];
NSLog(@"First_date: %@", dateString_first);

Выход будет:

 date: 02/11/2010 :Thursday
 First_date: 02/07/2010 :Sunday

так как я запустил эту программу 2/11/2010 u будет получать желаемый выход в зависимости от текущей даты.

Аналогично, если вы хотите получить первый рабочий день недели, т.е. дату понедельника, то просто измените код немного:

CHANGE: [components setDay: ([components day] - ([components weekday] -1))];

TO [components setDay: ([components day] - ([components weekday] -2))];

, чтобы получить дату понедельника для этой недели.

Аналогично u может попытаться найти дату любого из семи рабочих дней, изменив целое число -1, -2 и так далее...

Надежда на ответ на вопрос..

Спасибо, Бонсон Диас

0
ответ дан 26 November 2019 в 22:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: