Памылка дадання даты пры адніманні ад 0:00 (Dateadd error when subtracting from 0:00)


問題描述

Памылка дадання даты пры адніманні ад 0:00 (Dateadd error when subtracting from 0:00)

I am trying to convert column with GMT hour to the specified time zones from the user.

I get an error when VBA attempts to subtract 18000 secs (GMT‑5) from 01:00.

Selected_GMT = ‑18000
CellValue = "1/0/00 01:00"

New_Time = DateAdd("s", Selected_GMT,CellValue)

Is this error happening because VBA is unable to determine the hours before 00:00?  I have figured out the seconds for Selected_GMT, how can I use that to determine New_Time?

‑‑‑‑‑

參考解法

方法 1:

As ooo noted in a comment above, 1/0/00 is an invalid date code. However even if that was a typo in your question, the fact that the date uses a 2 digit year code begs the question "WHICH year 00?" Apologies if you already know this, but below I've extracted a recap of how Excel dates work from something that I've written elsewhere. The relevant part is "Day Zero And Before In Excel"; if the "00" actually represents *19*00 in the cell (as it will if you've just punched in "01:00 as the cell entry), you're going to run into problems subtracting from that. In which case, perhaps explicitly enter the date and time (perhaps using the current date) but hide the date component using formatting):

  

Excel uses a "date serial" system in which any date that you use in   calculations is represented as a positive integer value. That integer   value is calculated from an arbitrary starting date. Adding whole   numbers to a specific serial date moves you forward through the   calendar a day at a time, and subtracting whole numbers moves you   backwards... as long as you don't go past the starting date of the   serial number system and end up with a negative value. Times are   represented as fractions of a day; 0.25 for 6am, 0.5 for noon, 0.75   for 6pm and so on.

     

Excel Dates 

     

In the case of Excel for Windows, the starting date is 1 January 1900. That is, if you enter the value 1 into a cell in Excel   and format it as a date, you'll see the value as 1 January 1900. 2   will be the 2nd of January 1900, 3 the 3rd of January, and so on. 367   represents 1 January 1901 because Excel treats 1900 as having been a   leap year with 366 days. In other words, every full day that passes   adds 1 to the serial date.

     

It's important to remember that the above relates to Excel only, and   not to Access, SQL Server or other database products (or Visual Basic,   for that matter). In Access, for example, the range of valid dates is   1 January 100 to 31 December 9999, the same range that can be stored   in a VB or VBA variable with a Date data type.

     

Excel And The Macintosh 

     

Macintosh systems use a start date of 1 January 1904, neatly bypassing the 1900 leap year issue. However that   does mean that there's a 4 year discrepancy between the serial date   values in a workbook created in Excel for Windows, and one created in   Excel for the Mac. Fortunately under Tools ‑> Options‑> Calculation   (on pre‑2007 versions of Excel) you'll find a workbook option called   1904 Date System. If that's checked, Excel knows that the workbook   came from a Macintosh and will adjust its date calculations   accordingly.

     

Excel Times 

     

As noted in the introduction, times are calculated as a   fraction of a day. For example 1.5 represents noon on 2 January 1900.   1.75 represents 6pm on 2 January 1900.

(Snipped a bit about the leap year bug in 1900)

  

From 1 March 1900 onward Excel's dates are correct, but if you format   the number 1 using the format dddd, mmmm dd, yyyy you'll get the   result Sunday, 1 January 1900. That is incorrect; 1 January 1900 was a   Monday, not a Sunday. This day of week error continues until you reach   1 March, which is the first truly correct date in the Excel calendar.

     

Day Zero And Before In Excel 

     

If you use the value zero and display it   in date format you'll get the nonsense date Saturday 0 January 1900.   If you try to format a negative value as a date, you'll just get a   cell full of hash marks. Similarly if you try to obtain a date serial   number using Excel functions like DateValue, you can only do so for   dates on or after 1 January 1900. An attempt to specify an earlier   date will result in an error.

     

The 1904 (Macintosh) system starts from zero. (1 January 1904 has a   value of 0, not 1. Excel's on‑line help describes the Mac system as   starting from January 2, but that's probably easier than explaining to   users why a serial date value of 0 works on the Mac but not Excel.)   Negative numbers won't generate an error, but the number will be   treated as absolute. That is, both 1 and ‑1 will be treated as 2   January 1904.

(by KyleAlan K)

參考文件

  1. Dateadd error when subtracting from 0:00 (CC BY‑SA 3.0/4.0)

#datetime #excel #dateadd #vba






相關問題

NHibernate:HQL:從日期字段中刪除時間部分 (NHibernate:HQL: Remove time part from date field)

如何獲得在給定時間內發送超過 X 個數據包的 IP (How do I get IPs that sent more than X packets in less than a given time)

Памылка дадання даты пры адніманні ад 0:00 (Dateadd error when subtracting from 0:00)

查找與日曆相比缺失的日期 (Find missing date as compare to calendar)

CodeReview:java Dates diff(以天為單位) (CodeReview: java Dates diff (in day resolution))

顯示兩個給定時間之間的 15 分鐘步長 (display 15-minute steps between two given times)

如何在 C# 中獲取月份名稱? (How to get the month name in C#?)

fromtimestamp() 的反義詞是什麼? (What is the opposite of fromtimestamp()?)

構建 JavaScript 時缺少模塊 (Missing Module When Building JavaScript)

setTimeout 一天中的特定時間,然後停止直到下一個特定時間 (setTimeout for specific hours of day and then stop until next specific time)

將浮點數轉換為 datatime64[ns] (Converting float into datatime64[ns])

Python Dataframe 在連接時防止重複 (Python Dataframe prevent duplicates while concating)







留言討論