Кажется, что самый надежный способ запуститься с даты UTC состоит в том, чтобы создать новое Date
объект и использовать эти setUTC…
методы для установки его на дату/время, которую Вы хотите.
Тогда различное toLocale…String
методы обеспечат локализованный вывод.
// This would come from the server.
// Also, this whole block could probably be made into an mktime function.
// All very bare here for quick grasping.
d = new Date();
d.setUTCFullYear(2004);
d.setUTCMonth(1);
d.setUTCDate(29);
d.setUTCHours(2);
d.setUTCMinutes(45);
d.setUTCSeconds(26);
console.log(d); // -> Sat Feb 28 2004 23:45:26 GMT-0300 (BRT)
console.log(d.toLocaleString()); // -> Sat Feb 28 23:45:26 2004
console.log(d.toLocaleDateString()); // -> 02/28/2004
console.log(d.toLocaleTimeString()); // -> 23:45:26
MSDN: Класс массива
Открытый статический (общий в Visual Basic) члены этого типа потокобезопасны. Члены экземпляра не являются гарантированно поточно-ориентированная.
Эта реализация не обеспечивает синхронизированная (потокобезопасная) оболочка для массив; однако .NET Framework классы на основе Array предоставляют свои собственная синхронизированная версия сбор с помощью SyncRoot свойство.
Это не потокобезопасно!
Изменить:
Некоторая дополнительная информация, метод SetValue в классе Array не вызывается в обычных обстоятельствах, он вызывается только тогда, когда массив используется через интерфейс IList.
следующий код:
int[] arr = ...
arr[i] = value;
Не будет генерировать вызов SetValue (), вместо этого будет сгенерирован код операции OpCodes.Stelem.
Поэтому не имеет значения, является ли метод SetValue потокобезопасным или нет, если только к массиву не обращаются с использованием ссылки IList.
В вашем примере, где каждый поток устанавливает другой элемент в массиве, он будет потокобезопасным. Смотри на него как на холодильник, там три банки пива, три разных идут к холодильнику и забирают его банку с пивом, все будет хорошо, они наполовину выпьют, поставят обратно и вернутся позже.
Однако вы не можете поделиться 1 банкой пива с тремя людьми, ни при программировании, ни в реальной жизни.
так что да:
если каждый поток работает только с отдельной частью массива, все будут be well
PS: У меня нет источника, чтобы проверить это, но я использую потоки все время, и у меня никогда не было проблемы с голоданием (?), когда каждый поток одновременно читает n записей в массиве. У меня ДЕЙСТВИТЕЛЬНО возникают проблемы, когда я делюсь «одной и той же банкой пива», поэтому я считаю, что мой ответ правильный, но я бы хотел, чтобы кто-нибудь это подтвердил.
В вашем примере вызовы InternalSetValue (void *, object)
делаются в трех разных ячейках памяти. Следовательно, он должен быть потокобезопасным. Записи в эти места не перетекают в другие места, даже если они являются членами того же массива.