Что вы пытаетесь сделать, это назначить строковый литерал указателю char *
- это плохо (подробнее см. Как избавиться от deprecated conversion from string constant to ‘char*’
предупреждений в GCC? ). Вот возможный подход:
#define MAX_NAME_LEN 128
#define MAX_NICK_NAMES 10
struct widget_t {
char name[MAX_NAME_LEN];
uint8_t numberOfNicknames;
char nicknames[MAX_NICK_NAMES][MAX_NAME_LEN];
};
widget_t SomeWidget;
void setUpFunction () {
strcpy(SomeWidget.name, "Lawn Mower");
SomeWidget.numberOfNicknames = 2;
strcpy(SomeWidget.nicknames[0], "Choppie McGrasschopper");
strcpy(SomeWidget.nicknames[1], "Really Noisy");
}
В любом случае, поскольку вы пометите свой вопрос с помощью C++
, я бы предложил вам использовать вместо этого std::string
и std::vector
.
Скажем, пользователь в нью-йоркских наборах в унисон дата проекта как "в любое время в понедельник 26 января". Это означает "в любое время от 0600 понедельник 26 января к 0600 вторник 27 января" в Брюсселе и "в любое время с 2000 воскресенье 25 января к 2000 понедельник 26 января" в Лос-Анджелесе.
Так выполнение задачи в 2100 в понедельник 26 прекрасно в Брюсселе и Нью-Йорке, но слишком поздно в Лос-Анджелесе.
Одна возможная работа вокруг никогда не является просто работой с датой. Если время не указано, или набор, он в течение 0000 часов или 2 400 часов в день указал в часовом поясе пользователя.
Пользователям, вероятно, придется иметь дело со странными должными датами/временами, но говорящий, поскольку кто-то, кто раньше работал на международном уровне, это отчасти, идет с территорией.
Вы не сможете достигнуть того, что Вы пытаетесь обойтись без хранения точного времени. У Вас просто нет достаточной информации.
Когда Вы не имеете времени, предполагаете, что время является концом бизнеса в основной локали для приложения, затем переведите то время, поскольку Вы были бы любое другое время. Альтернатива приняла бы конец рабочего дня в местное время и корректировать это к UTC. Все использующие приложение должны были бы понять любое предположение времени по умолчанию, которое Вы делаете, когда время не указано. Координирование в основной офис может быть лучшим на крупном предприятии, тогда как координирование к местному времени может быть лучшим в высоко децентрализованных средах, где локальный контекст одинаково важен.
Если Вы не храните минуты и секунды, необходимо предположить, что вводимая дата является желаемой датой, а не к любым корректировкам к GMT Просто помещает его в базу данных, как. Люди на западном побережье должны будут предположить, что дата истечения срока является тем же независимо от того, где Вы находитесь в мире. Если Вы хотите корректироваться для часовых поясов, необходимо будет собрать больше информации, как час, минуты и секунды.
Самое легкое решение состояло бы в том, чтобы только отобразиться как та же дата всех. Крайний срок затем эффективно был бы полуночью в последнем часовом поясе.
Иначе решите то, чем время по умолчанию крайнего срока должно быть в часовом поясе, задача была создана в, например, 21-го марта 17:00 EST или 22-го марта 0:00 EST, и отобразите это в локальном часовом поясе. Различие в часовом поясе затем продвинет его в предыдущий день или на следующий день соответственно для средства просмотра.
2008 SQL допускает тип данных Даты, который не имеет никакой временной стоимости связанной с ним. Это позволяет кому-то говорить, что мне нужен в сделанный этой Датой, но я не забочусь, ли это +/-несколько часов. Если выбранная дата является 01.01.2009, но это происходит 02.01.2009 в 2:00 их время, они, вероятно, не заботятся.
Когда пользователю нужно что-то сделанное определенной датой и временем, как окончание рабочего дня 01.01.2009 затем необходимо сохранить его в DateTime как UTC и преобразовать его в клиентское местное время.
Это вынет большую часть сложности из указания, когда что-то будет завершено, это будет или завершено около определенного дня или к определенному времени.
Если бы у Вас есть единственный экземпляр DB, я сохранил бы все даты в метке времени даты и времени Вашего сервера БД. Если Вы добавляете метку времени к строкам, рассматриваете GetDate () в T-SQL или как значение по умолчанию столбца даты с меткой времени. Затем у Вас есть своя единственная контрольная точка навсегда. Рассмотрите формат UTC там.
Затем все клиенты, получающие доступ к дате, делают свое собственное преобразование в "местное время", которое может быть интерпретировано вещами как: пользовательские настройки, метка времени даты на клиентском компьютере, и т.д.
Не зная больше, это трудно говорить точно, каково разрешение.
Ваше решение зависит от Вашего приложения и требований.
Я сначала сохранил бы UTC + смещение в Ваших структурах данных, таким образом, легко отобразиться для любого часового пояса.
Скорее всего, если задача или встреча будут должны в 12:00 на 21/март в Лондоне затем, то она произойдет в 2 130 на 21/март в Аделаиде (+0930), но это - требование к приложению не любой зловещий связанный с часовым поясом стандарт.
Если Вы хотите окончательное в гибкости, добавьте флаг, который может сделать даже должный одновременно в каждом часовом поясе или одновременно неважно, где Вы (поражены) и показываете событие соответственно.
Вы могли бы хотеть сохранить дату в от этого, знающий часовой пояс. Это поможет Вам в Ваших вычислениях. 2008 SQL Server, например, поддерживает datetimeoffset, который делает точно это. Кроме того, при использовании SQL 2005 с небольшим количеством усилия, можно записать собственному SQL тип данных CLR для поддержки этого.