2009-11-17 28 views
8

Tôi đang gặp sự cố khi tạo dấu thời gian trong tệp loạt Windows, bởi vì tôi nhận được các định dạng ngày khác nhau trên các phiên bản Windows khác nhau.Cách lấy dấu thời gian tệp UNIVERSAL Windows

máy của tôi:

>echo %date% 
>Tue 11/17/2009 

Friends máy:

>echo %date% 
>11/17/2009 

Tôi đoán phải có một số cách để nhận được ngày (2009/11/17) từ cả hai chuỗi sử dụng for/f . Tôi đã cố gắng và googling và không thể tìm thấy câu trả lời.

Có cách nào khác để nhận dấu thời gian mà không sử dụng% date% không?

Trả lời

2

Sử dụng VBScript nếu bạn muốn khôi phục cài đặt thời gian ngày độc lập:

thedate = Now 
yr = Year(thedate) 
mth = Month(thedate) 
dy = Day(thedate) 
hr = Hour(thedate) 
min = Minute(thedate) 
sec = Second(thedate) 
WScript.Echo yr&mth&dy&hr&min&sec 
+0

Điều này thực sự hữu ích được sử dụng bên trong tập lệnh bởi: > cscript date.vbs // Nologo (trong đó date.vbs chứa mã bạn đưa vào) – eliocs

+0

Điều này không chỉ trả về giờ địa phương? Câu hỏi đặt ra là tạo ra datetime UTC - và là những gì tôi đang tìm kiếm. – Jim2B

1

Thật không may, nó không thể thực hiện trực tiếp, vì vậy bạn cần phải sử dụng để hack như GetDate.cmd.

Có rất nhiều VBScript và các công cụ dòng lệnh nhỏ bên ngoài có sẵn, đó không phải là điều tôi muốn phụ thuộc vào trừ khi bạn đang sử dụng một cái gì đó có tính chất đó trong toàn bộ hệ thống của bạn.

Cá nhân, tôi sẽ cố gắng định tuyến xung quanh nó bằng cách sử dụng PowerShell gọn gàng để tránh hoàn toàn vấn đề.

+0

Đây là một ý nghĩ tuyệt vời nhưng những gì sắp xếp của mã PowerShell sẽ làm điều này? – Jim2B

+0

@ Jim2B Trong PS, bạn có thể lấy đối tượng qua [DateTime] :: UtcNow và sau đó là bên trên đó (ví dụ: nó có thuộc tính Month, v.v.). Đó có phải ý của bạn? –

0

Bạn không cần VBScript. Bạn có thể làm điều đó với một cái gì đó như thế này:

echo %date:~-10,2%/%date:~-7,2%/%date:~-4,4% 

Source

+2

không giả định định dạng của đầu ra của biến ngày tháng? –

+0

Yup, điều này giả định định dạng ngày địa phương có định dạng nhất định. – jamiebarrow

4

Check-out doff.exe. Tôi sử dụng rất nhiều điều này để nhận được dấu thời gian cho việc đặt tên các tệp nhật ký. Từ trang web của mình:

DOFF in ngày và giờ được định dạng, với chênh lệch ngày tùy chọn, (ví dụ: in ngày hôm qua, +1 in ngày mai). Để xem tất cả các tùy chọn có sẵn, hãy thực hiện "doff -h". Tôi thường sử dụng tiện ích này để đổi tên các tệp nhật ký để chúng bao gồm dấu thời gian, (xem ví dụ thứ ba bên dưới). Mã này nên biên dịch theo Unix/Linux, cũng như DOS.

lệnh mẫu:

C:\>doff 
19991108131135 

Khi không có các thông số đầu ra là ngày hiện tại/thời gian theo định dạng sau: yyyymmddhhmiss

C:\>doff mm/dd/yyyy 
11/08/1999 

Trong ví dụ trên một đặc tả định dạng ngày được đưa ra.

@echo off 
for /f "tokens=1-3 delims=/ " %%a in ('doff mm/dd/yyyy -1') do (
set mm=%%a 
set dd=%%b 
set yyyy=%%c) 
rename httpd-access.log httpd-access-%yyyy%%mm%%dd%.log 

Các tập tin batch ví dụ trên cho thấy một cách gọn gàng để đổi tên một tập tin đăng nhập dựa trên ngày hôm qua.Lệnh "for" thực thi doff để in ngày hôm qua, (tham số "-1" chỉ định ngày hôm qua), sau đó trích xuất từng thành phần của ngày vào các biến tập tin batch của DOS. Các "đổi tên" lệnh đổi tên "httpd-access.log" thành "httpd-access- [ngày hôm qua] .log"


Ngoài ra kiểm tra now.exe của Microsoft, có sẵn trong Windows Server 2003 Resource Kit Tools. Một điều xấu tôi phát hiện ra (một cách khó khăn) về nó là nó đặt ERRORLEVEL thành số ký tự được in.

Trông như thế này:

c:\>now 

Thu May 19 14:26:45 2011 

Trợ giúp:

NOW : Display Message with Current Date and Time 

Usage : NOW [message to be printed with time-stamp] 

    NOW displays the current time, followed by its command-line arguments. 
    NOW is similar to the standard ECHO command, but with a time-stamp. 
0

Như tôi đã được đăng tại đây: Batch: Timestamp to UNIX Time

gì về đơn giản chương trình C trong 1 dòng dài trở về UNIX timestamp? Bạn có thể lấy giá trị từ% errorlevel% trong tập lệnh batch.

#include <stdio.h> 
#include <time.h> 

int main(void) 
{ 
    return (int) time(NULL); 
} 

Trong thử nghiệm của tôi tại dấu nhắc lệnh nó làm việc:

C:\Users\dabaran\Desktop\cs50\src\C>.\time || echo %errorlevel% && set mytstamp=%errorlevel% 
1419609373 

C:\Users\dabaran\Desktop\cs50\src\C>echo %mytstamp% 
1419609373 
Các vấn đề liên quan