powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
23 сообщений из 23, страница 1 из 1
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #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
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38388721
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
DateOnly = FormatDateTime(DateTime, vbShortDate)
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38388723
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
If Fix(FileMod) = Date - 1 Then ...
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38388848
qwerty112
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: vbnet
1.
If datevalue(FileMod) = Date - 1 Then ...
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38390786
Шмелевод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina, то что надо!
Shocker.Pro,qwerty112
Спасибо!
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38390968
Шмелевод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему в первой строке переменная DataOnlyFileMod имеет значение даты, а в следующей, после If уже она Empty ?

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

Код в студию.
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #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
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38391009
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А где пресловутая проверка на Empty?

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



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

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

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


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

Впрочем, я нашел ошибку
Как ее исправить
...
Рейтинг: 0 / 0
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #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
сравнить две даты: только день,месяц,год - без времени, часов,минут,секунд.
    #38391146
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ШмелеводЕсли тут вкл. то выдает ошибку при компиляциину естественно, а если выключить, то ошибки не видно и все как бы хорошо.

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

Код: vbnet
1.
Dim DateOnlyFileMod As Date


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

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

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

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

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

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

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

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


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