2016-04-17 6 views
0

lokalen Format Datum und Uhrzeit Ich habe verschiedene Lösungen, dh Parsing, Teilstrings und Splitting geschaut und keiner von ihnen entweder einen Wert oder die erforderliche Wert.Wie UTC Datumsformat von SalesForce API konvertieren und konvertieren Sie es mit Google Apps Script

Das Format über Salesforce API erhalten ist „2014-08-19T02: 26: 00.000 + 0000“

Im Grunde möchte ich eine benutzerdefinierte Funktion, die in Google Sheets verwendet werden kann, um dieses Datum/Zeit-Format zu konvertieren und nehmen Tageslicht in Betracht Spar

danke im voraus

+0

Sie können eine einfache Parsing-Funktion schreiben, die die Zeichenfolge in das es die Teile spaltet (zB 's.split (/ \ D /)'), dann verwenden Sie das * Datum * Konstruktor Werte. Es sollte nur 2 Zeilen Code benötigen, ein paar mehr, wenn Validierung erforderlich ist. – RobG

+0

Javascript-Datum bietet toLocaleString-Funktion. Also, neues Datum ("2014-08-19T02: 26: 00.000 + 0000"). ToLocaleString(); sollte genug sein, denke ich, vorausgesetzt, das Dokument/Tabellenkalkulation/Skript hat Locale Einstellung richtig eingestellt. – jad

+0

@ jad- * toLocaleString * bietet eine implementierungsabhängige Zeichenfolge, die die lokale Zeit darstellt und sich von Browser zu Browser stark unterscheidet. Die standard * toString * -Methode bietet eine konsistentere Zeichenkette (obwohl sie immer noch vom Browser abhängig ist). Aber das ist nicht das Problem des OP. – RobG

Antwort

0

I wie unten eine einfache Funktion verwenden:

function parseDate(string) { 
    var parts = string.split('T'); 
    parts[0] = parts[0].replace(/-/g, '/'); 
    var t = parts[1].split(':'); 
    var refStr = new Date(new Date(parts[0])).toString();// use this to get TZ for daylight savings 
    var fus = Number(refStr.substr(refStr.indexOf('GMT')+4,2)); 
    return new Date(new Date(parts[0]).setHours(+t[0]+fus,+t[1],0)); 
} 
+0

Es macht keinen Sinn, das Datum vom Zeitteil zu entfernen. Wenn Sie dem Konstruktor von Date vertrauen, Strings zu analysieren (was nicht empfohlen wird), sollten die Zeit und die Zone verknüpft bleiben. Es wird außerdem dringend empfohlen, der integrierten * toString * -Methode nicht zu vertrauen, da sie vollständig von der Implementierung abhängig ist und möglicherweise unterschiedliche Zeichenfolgen in verschiedenen Implementierungen zurückgibt. Der Offset der Host-Zeitzone ist mit [* getTimezoneOffset *] (http://www.ecma-international.org/ecma-262/6.0/#sec-date.prototype.gettimezoneoffset) zuverlässig verfügbar. – RobG

+0

Oh, und das obige ignoriert den Minuten-Teil des Offset (wenn es überhaupt vorhanden ist), so dass Zonen, die Offsets wie 0430 haben, falsch konvertiert werden. Und es verwendet nur den Datumsteil, der in den meisten Browsern als UTC geparst wird, so dass er nicht das richtige lokale Datum oder die richtige Zeit erhält. Wenn also Sommerzeit gilt, wird es ungefähr 24 Stunden lang um die Umstellungszeiten falsch liegen. – RobG

+0

@Rob Ich verstehe Ihren Kommentar und ich weiß zu schätzen, aber bedenken Sie, dass es sich in diesem Beitrag speziell um Google Apps Script handelt, das nicht vom Browser abhängig ist, da es auf der Serverseite läuft. Das stimmt, ich stimme zu, wie ich das TZ bekomme ist nicht sehr elegant :-) Ich werde über etwas besseres nachdenken. –

0

zunächst danke für jeden Input. Durch eine Kombination der von RobG und Serge Insas gelieferten Informationen habe ich das Skript überarbeitet und eines erstellt, das meinen Bedürfnissen entsprach. Bitte sehen Sie unten, weitere Beratung wäre willkommen.

/* 
 

 
The script first has all variables declared. 
 
As the script runs inconjunction with an API query running off single trigger for defined sequential functions where the previous parsed date records are cleared and then re-parsed and runs with loop function for a whole column of data within specified range 
 

 
*/ 
 

 
function parseDate() { 
 
    var source_spreadsheet = SpreadsheetApp.openById("Sheet_Id"); 
 
    SpreadsheetApp.setActiveSpreadsheet(source_spreadsheet); 
 
    var sheet = source_spreadsheet.getSheetByName("Sheet_Tab"); 
 
    var startRow = 2; 
 
    var numRows = 4500; 
 
    var startCol = 1; 
 
    var numCols = 7; 
 
    var dataRange = sheet.getRange(startRow, startCol, numRows, numCols) 
 
    sheet.getRange(startRow, startCol + 1, numRows, numCols - 1).clear({contentsOnly: true}); 
 
    var data = dataRange.getValues(); 
 
    for (var i = 0; i < data.length; ++i) { 
 
    var row = data[i]; 
 
    var SFConnectDate = row[0]; 
 
    var DConnected = row[1]; 
 
    var SFCutoverDate = row[2]; 
 
    var DInUse = row[3]; 
 
    var Lat = row[5]; 
 
    var Long = row[6]; 
 
    if (SFConnectDate != "" && DConnected == "" && Lat != "" && Long != "") { 
 
     var parts = SFConnectDate.split('T'); 
 
     parts[0] = parts[0].replace(/-/g, '/'); 
 
     var Fdd = parts[0].split('/'); 
 
     var AllTime = parts[1].split('.'); 
 
     var Ftt = AllTime[0].split(':'); 
 
     var D = new Date(Fdd[0],(Fdd[1]-1),Fdd[2] ,Ftt[0],Ftt[1],Ftt[2]); 
 
     var TZ = (D.getTimezoneOffset())/60; 
 
     var DConnected = new Date(Fdd[0],(Fdd[1]-1),Fdd[2],(Ftt[0]-TZ),Ftt[1],Ftt[2]); 
 
     sheet.getRange(startRow + i, 2).setValue(DConnected); 
 
    } 
 
    } 
 
}

Verwandte Themen