Установите правильный TimeZone [дубликат]

Согласно официальной странице MSDN , кодировка по умолчанию не фиксирована - это зависит от настроек ОС. Если вы знаете, какая кодировка файла имеет, укажите это!

EDIT: Затем попробуйте распечатать данные кодировки (например, имя) из .net framework, который работает. Затем укажите то же самое в ядре .net 2. Не полагайтесь на значение по умолчанию. Эта страница MSDN, Список кодировок в образце кода содержит список поддерживаемых кодировок.

UPDATE by gsharp: Мне пришлось ссылаться на пакет NuGet System.Text.Encoding.CodePages, зарегистрировать их и использовать его

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

 var enc1252 = Encoding.GetEncoding(1252);

 var inStr = new StreamReader(infile, enc1252);
 var outStr = new StreamWriter(outFile, false, enc1252);

11
задан Josh Caswell 16 April 2012 в 21:16
поделиться

3 ответа

Объекты

NSDate не имеют часовых поясов. Они представляют собой абсолютный момент времени. Однако, когда вы запрашиваете его для своего description (путем печати его с помощью NSLog(), например,), он должен выбрать часовой пояс. Самым разумным выбором по умолчанию является GMT. Если вы не находитесь в GMT, дата будет казаться неправильной, на величину вашего собственного смещения.

Вы должны всегда использовать NSDateFormatter для создания строки для отображения. Часовой пояс форматирования должен быть установлен на ваш, который по умолчанию.

20
ответ дан 3 revs 28 August 2018 в 08:34
поделиться

Вы можете скорректировать свою дату следующим образом:

NSDate * dateGMT = [NSDate date];
NSTimeInterval secondsFromGMT = [[NSTimeZone localTimeZone] secondsFromGMT];
NSDate * correctDate = [dateGMT dateByAddingTimeInterval:secondsFromGMT];
2
ответ дан Florian Burel 28 August 2018 в 08:34
поделиться
-(NSDate *)getDateInCurrentSystemTimeZone
{
    NSDate* sourceDate = [NSDate date];
    NSTimeZone* sourceTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    NSTimeZone* destinationTimeZone = [NSTimeZone systemTimeZone];

    NSInteger sourceGMTOffset = [sourceTimeZone secondsFromGMTForDate:sourceDate];
    NSInteger destinationGMTOffset = [destinationTimeZone secondsFromGMTForDate:sourceDate];
    NSTimeInterval interval = destinationGMTOffset - sourceGMTOffset;

    NSDate* destinationDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
    return destinationDate;
}
0
ответ дан Khurshid 28 August 2018 в 08:34
поделиться
Другие вопросы по тегам:

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