Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд. / 23 сообщений из 23, страница 1 из 1
06.09.2013, 09:54
    #38388714
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Задача.
Нужно скопировать файлы с текущей датой модификации минус один день ( прошлые сутки ) и типом
Например:
из папки "Дир1" скопировать файлы тест1.среда, тест2.среда2, тест3.среда3 в папку "Среда" соответственно в четверг из папки "Дир1" файлы с именами тест1.среда и датой модификации не копировать. В пятницу и так дальше для остальных дней недели всё повторить...
Вопрос: как мне сравнить две даты - день,месяц,год - текущую дату модификации файла с системной датой, чтобы отбросить время: часы, минуты, секунды ?
Делаю так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Sub CopyFile()

Set CurFile = FSys.GetFile(FileSource)
      FileMod = CurFile.DateLastModified
               If Left(CStr(FileMod), 10) = CStr(PreviousDay) Then FSys.CopyFile FileSource, FileDest, True
    Else
        Set FSys = Nothing
        End If
        
    End Sub

Модератор: Учимся использовать тэги оформления кода - FAQ
...
Рейтинг: 0 / 0
06.09.2013, 09:59
    #38388721
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Код: vbnet
1.
DateOnly = FormatDateTime(DateTime, vbShortDate)
...
Рейтинг: 0 / 0
06.09.2013, 09:59
    #38388723
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Код: vbnet
1.
If Fix(FileMod) = Date - 1 Then ...
...
Рейтинг: 0 / 0
06.09.2013, 11:17
    #38388848
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Код: vbnet
1.
If datevalue(FileMod) = Date - 1 Then ...
...
Рейтинг: 0 / 0
09.09.2013, 11:19
    #38390786
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Akina, то что надо!
Shocker.Pro,qwerty112
Спасибо!
...
Рейтинг: 0 / 0
09.09.2013, 14:04
    #38390968
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
А почему в первой строке переменная DataOnlyFileMod имеет значение даты, а в следующей, после If уже она Empty ?

Код: vbnet
1.
2.
DateOnlyFileMod = FormatDateTime(FileMod, vbShortDate)
        If DataOnlyFileMod = PreviousDay Then FSys.CopyFile FilePath, FileDest, True
...
Рейтинг: 0 / 0
09.09.2013, 14:17
    #38390994
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Почему я пью чай, а у меня на балконе нет синицы?

Код в студию.
...
Рейтинг: 0 / 0
09.09.2013, 14:23
    #38391001
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Sub CopyFile()

Dim FileMod As String, CurFileMod, DateOnlyFileMod

FileSource = Dir(SourceDir + TempCopyDir + "*.*")

Do While FileSource <> ""
    FilePath = SourceDir + TempCopyDir + FileSource
    FileDest = CurDateDir + "\" + TempCopyDir + FileSource
        Set CurFileMod = FSys.GetFile(FilePath)
        FileMod = CurFileMod.DateLastModified
       DateOnlyFileMod = FormatDateTime(FileMod, vbShortDate)
        If DataOnlyFileMod = PreviousDay Then FSys.CopyFile FilePath, FileDest, True
        
    FileSource = Dir
Loop
       End Sub
...
Рейтинг: 0 / 0
09.09.2013, 14:26
    #38391009
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
А где пресловутая проверка на Empty?

Кроме того, зачем вы присваиваете дату переменной типа String? это чревато косяками на разных компьютерах, где разные национальные настройки даты.
...
Рейтинг: 0 / 0
09.09.2013, 14:34
    #38391019
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,
Исправил на:
Код: vbnet
1.
Dim DateOnlyFileMod As Date



Пресловутая ?
...
Рейтинг: 0 / 0
09.09.2013, 14:39
    #38391031
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
ШмелеводПресловутая ?Шмелевода в следующей, после If уже она Emptyкак именно вы определяете, что ДО if она не Emply, а после If - Empty. В коде я этого не вижу.
...
Рейтинг: 0 / 0
09.09.2013, 14:43
    #38391043
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Ставлю брекпоинт на "пресловутую" строку, всплывающее окно показывает значение переменной.
У меня 6-я версия басика.
...
Рейтинг: 0 / 0
09.09.2013, 14:49
    #38391050
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
на строку FileSource = Dir ?
а если поставить на If DataOnlyFileMod = PreviousDay Then
то что показывает?
...
Рейтинг: 0 / 0
09.09.2013, 14:52
    #38391060
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Код: vbnet
1.
If DataOnlyFileMod = PreviousDay Then


Вот на её и ставлю.
Пишет: DataOnlyFileMod = Empty
Вопрос в этом и был...
...
Рейтинг: 0 / 0
09.09.2013, 14:59
    #38391072
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Тогда вы не правы. Команда, на которой остановилось выполнение, еще не выполнена
Так что в этом случае DataOnlyFileMod = Empty ДО выполнения If, а не ПОСЛЕ.

Впрочем, я нашел ошибку
Как ее исправить
...
Рейтинг: 0 / 0
09.09.2013, 15:30
    #38391128
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Сорри, я ошибся.. конечно же после - на строке:
Код: vbnet
1.
 FileSource = Dir ?


брекпоинт и см. что произошло после If т.е. строкой выше. И там пусто...
Option Explicit у меня в самом начале кода включена. Если тут вкл. то выдает ошибку при компиляции
Compile error.
invalid inside procedure
Сделал всё, как сказано в Вашей ссылке.
Ситуация не поменялась.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub CopyFile()
'Option Explicit

Dim FileMod As String, FilePath As String
Dim CurFileMod As Object
Dim DateOnlyFileMod As Date

FileSource = Dir(SourceDir + TempCopyDir + "*.*")

Do While FileSource <> ""
    FilePath = SourceDir + TempCopyDir + FileSource
    FileDest = CurDateDir + "\" + TempCopyDir + FileSource
        Set CurFileMod = FSys.GetFile(FilePath)
        FileMod = CurFileMod.DateLastModified
       DateOnlyFileMod = FormatDateTime(FileMod, vbShortDate)
        If DataOnlyFileMod = PreviousDay Then FSys.CopyFile FilePath, FileDest, True
        
    FileSource = Dir
Loop
       
End Sub
...
Рейтинг: 0 / 0
09.09.2013, 15:42
    #38391146
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
ШмелеводЕсли тут вкл. то выдает ошибку при компиляциину естественно, а если выключить, то ошибки не видно и все как бы хорошо.

Option Explicit надо написать в начале модуля
Если выдает ошибку, так с ней надо разобраться, а не проигнорировать путем отключения.
Переменная DataOnlyFileMod у вас не объявлена, на что и должен указать Option Explicit (когда разберетесь с тем, на что он помимо этого ругается)
...
Рейтинг: 0 / 0
09.09.2013, 15:51
    #38391161
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Код: vbnet
1.
Dim DateOnlyFileMod As Date


Объявлено всё тут.

На строку
Код: vbnet
1.
Option Explicit 

ругается.
Compile error.
invalid inside procedure
...
Рейтинг: 0 / 0
09.09.2013, 16:01
    #38391178
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Шмелевод,

Option Explicit должно быть написано в начале МОДУЛЯ, а не в начале ПРОЦЕДУРЫ, о чем вам и сообщает эта ошибка. Ctrl+Home нажмите и там пишите.
...
Рейтинг: 0 / 0
09.09.2013, 16:14
    #38391197
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,

Спасибо!
У меня так и сделано. Выполняется без ошибок.
Результат прежний...
...
Рейтинг: 0 / 0
09.09.2013, 16:19
    #38391207
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Не верю
ибо DateOnlyFileMod<>DataOnlyFileMod, при этом DataOnlyFileMod не объявлена и Option Explicit никак не может не ругаться на это
...
Рейтинг: 0 / 0
09.09.2013, 16:21
    #38391213
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.ProНе верю
ибо DateOnlyFileMod<>DataOnlyFileMod, при этом DataOnlyFileMod не объявлена и Option Explicit никак не может не ругаться на этохотя, конечно, есть вариант, что DataOnlyFileMod объявлена где-то еще на уровне модуля или вообще глобально, тогда таки-да, ругаться не будет.
Проверить можно просто - правой кнопкой на DataOnlyFileMod и Definition
...
Рейтинг: 0 / 0
09.09.2013, 16:28
    #38391221
Шмелевод
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
Shocker.Pro,
:)) эх,Семён Семёныч...!
сразу две очепятки...

Эта объявлена в процедуре.
DateOnlyFileMod

А эта глобальная. Забыл про неё.
DataOnlyFileMod

Вот Option Explicit и не ругается.
Спасибо огроменное, Shocker.Pro! Выручил.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд. / 23 сообщений из 23, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]