2017-10-10 68 views
0

我有一个Google电子表格,并尝试从表格中读取日期。以下脚本以字符串形式提供日期。但是这一天太少了。GoogleApps Utilities.formatDate返回错误的日期

function testDate() { 
    var selectedSpreadsheetId = PropertiesService.getUserProperties().getProperty("spreadsheetId"); 
    var sheet = SpreadsheetApp.openById(selectedSpreadsheetId); 

    var rows = sheet.getDataRange(); 
    var values = rows.getValues(); 
    var row = values[0]; 
    var test = ""; 
    var test = Utilities.formatDate(new Date(row[0]), "GMT+1", "MM/dd/yyyy");  
    Logger.log("result is: "+test) 
} 

您需要创建Google Spreadsheet并在左上角的单元格中输入日期14.10.2017。示例中给出的日期是德国日期格式。

日志中的结果是2017年10月13日,但应该是2017年10月14日

我知道,谷歌使用了“正常”的Java的SimpleDateFormat

为什么?

+0

这可能是与时区的问题,通过适当的时区的功能。 –

回答

2

您不应该像您那样对时区进行硬编码,因为您的国家使用夏令时。 您可以在代码中使用Session.getScriptTimeZone()代替或SpreadsheetApp.getActive().getSpreadsheetTimeZone()

它会象下面这样:

var test = Utilities.formatDate(new Date(row[0]), Session.getScriptTimeZone(), "MM/dd/yyyy");  
    var test2 = Utilities.formatDate(new Date(row[0]), SpreadsheetApp.getActive().getSpreadsheetTimeZone(), "MM/dd/yyyy");  
    Logger.log("result is: "+test) 
    Logger.log("result2 is: "+test2) 

enter image description here

+0

谢谢!现在它可以工作 – user668338