MATLAB: la table de lecture et la table de lecture ne peuvent pas charger correctement le fuseau horaire

J’ai un CSV généré à partir de ThingSpeak, qui contient un datetime contenant un identifiant de fuseau horaire (CEST dans mon cas). Cela ressemble à ceci:
 
created_at,entry_id,field1,field2,field3,latitude,longitude,elevation,status
2020-06-06 18:36:17 CEST,1,434,2.12121212121,30.3487192708,,,,
2020-06-06 18:36:33 CEST,2,433,2.11632453568,30.2823285934,,,,
2020-06-06 18:36:48 CEST,3,436,2.13098729228,30.4815006257,,,,
2020-06-06 18:37:03 CEST,4,433,2.11632453568,30.2823285934,,,,
 
Maintenant, lorsque je modifie le fichier et supprime « CEST » de toutes les lignes, readtimetable importe le fichier correctement, sans aucun problème. Mais lorsque je le laisse tel quel, readtable importe le champ sous forme de texte, tandis que readtimetable refuse complètement.
J’ai essayé de spécifier le format manuellement, comme suit:
 
opts.VariableNames = ["created_at", "Var2", "field1", "Var4", "Var5", "Var6", "Var7", "Var8", "Var9"];
opts.SelectedVariableNames = ["created_at", "field1"];
opts.VariableTypes = ["datetime", "string", "double", "string", "string", "string", "string", "string", "string"];
opts = setvaropts(opts, "created_at", "InputFormat", "dd-MM-yyyy HH:mm:ss z", "TimeZone", 'Europe/Warsaw');
 
Avec cela, readtimetable fonctionne mais… tous les champs sont transformés en NaT.
Maintenant, c’est un comportement étrange, car l’utilisation de la fonction datetime avec l’un de ces champs copiés fonctionne parfaitement:
 
>> date = datetime("2020-06-06 18:36:17 CEST","InputFormat","yyyy-MM-dd HH:mm:ss z","TimeZone","Europe/Warsaw")
date =
datetime
06-Jun-2020 18:36:17
 
L’importateur de Matlab ne peut pas non plus le gérer, lorsque j’utilise le fichier CSV comme entrée, il détecte à tort le délimiteur, une fois corrigé et le type de champ défini sur datetime, de toute façon j’ai essayé de configurer le format d’entrée échoue et se traduit par des NaT. J’ai même tenté de définir le format sur « aaaa-MM-jj HH: mm: ss ‘CEST' », afin que le fuseau horaire soit traité comme une chaîne, mais il ne parvient toujours pas à le reconnaître comme une date / heure correcte.
Utilisation de Matlab R2020a

Meilleure réponse

  • Ce qui a fonctionné ici pour R2019b
     

    >> opt=detectImportOptions('thing.csv','delimiter',',')
    opt =
    DelimitedTextImportOptions with properties:
    Format Properties:
    Delimiter: {','}
    Whitespace: '\b\t '
    LineEnding: {'\n' '\r' '\r\n'}
    CommentStyle: {}
    ConsecutiveDelimitersRule: 'split'
    LeadingDelimitersRule: 'keep'
    EmptyLineRule: 'skip'
    Encoding: 'windows-1252'
    Replacement Properties:
    MissingRule: 'fill'
    ImportErrorRule: 'fill'
    ExtraColumnsRule: 'addvars'
    Variable Import Properties: Set types by name using setvartype
    VariableNames: {'created_at', 'entry_id', 'field1' ... and 6 more}
    VariableTypes: {'char', 'double', 'double' ... and 6 more}
    SelectedVariableNames: {'created_at', 'entry_id', 'field1' ... and 6 more}
    VariableOptions: Show all 9 VariableOptions
    Access VariableOptions sub-properties using setvaropts/getvaropts
    PreserveVariableNames: false
    Location Properties:
    DataLines: [2.00 Inf]
    VariableNamesLine: 1.00
    RowNamesColumn: 0
    VariableUnitsLine: 0
    VariableDescriptionsLine: 0
    To display a preview of the table, use preview
    >> thing=readtable('thing.csv',opt);
    >> thing.created_at=datetime(thing.created_at,"InputFormat","yyyy-MM-dd HH:mm:ss z", ...
    "TimeZone","Europe/Warsaw",'Locale','pl_PL')
    thing =
    4×9 table
    created_at entry_id field1 field2 field3 latitude longitude elevation status
    ____________________ ________ ______ ______ ______ __________ __________ __________ __________
    06-Jun-2020 18:36:17 1.00 434.00 2.12 30.35 {0×0 char} {0×0 char} {0×0 char} {0×0 char}
    06-Jun-2020 18:36:33 2.00 433.00 2.12 30.28 {0×0 char} {0×0 char} {0×0 char} {0×0 char}
    06-Jun-2020 18:36:48 3.00 436.00 2.13 30.48 {0×0 char} {0×0 char} {0×0 char} {0×0 char}
    06-Jun-2020 18:37:03 4.00 433.00 2.12 30.28 {0×0 char} {0×0 char} {0×0 char} {0×0 char}
    >>