Чтоб мы друг друга понимали уточню:Номер недели с начало года, что как бы принято или с месяца
package main.java.com;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class CalendarToDate {
private static Date getDate(int year, int week, int day) {
Calendar calendar = new GregorianCalendar();
calendar.clear();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.WEEK_OF_YEAR, week);
calendar.add(Calendar.DAY_OF_YEAR, day-1);
return calendar.getTime();
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Введите год");
int year = scanner.nextInt();
System.out.println("Введите неделю");
int week = scanner.nextInt();
System.out.println("Введите день");
int day = scanner.nextInt();
Date date = getDate(year, week, day);
System.out.println(date);
}
}
Вчера не было возможности отписаться.Ну короче
Находишь номер неделю по году и месяцу и датой на 1 число
Это будет первая неделя данного месяца
Далее смещаешься на количество недель, которое тебе надо -1
Далее этой неделе с понедельника смещаешься на тот день, который тебе нужен
И от готовая дата
function getdatefrom(strs: string): string;
var
m_year, m_weekday, m_num_weekday, m_month: string;
date_tmp, BDate: TDateTime;
masiv: StringArray;
const
PUNCT = [':', ';'];
begin
if TryStrToDate(strs, BDate) then
result := strs
else
Begin
try
SetLength(masiv, 4);
masiv := split(strs, PUNCT);
m_num_weekday := masiv[0];
m_weekday := masiv[1];
m_month := masiv[2];
finally
if m_num_weekday = '' then
m_num_weekday := inttostr(WeekOfTheMonth(now));
if m_weekday = '' then
m_weekday := inttostr(dayOfTheMonth(now));
if m_month = '' then
m_month := inttostr(Monthoftheyear(now));
end;
// sShowMessage (m_num_weekday+' -'+m_weekday+' -'+m_month);
if length(masiv) = 4 then
m_year := masiv[3]
else
m_year := inttostr(YearOf(now));
date_tmp := StrToDate(FormatDateTime('dd.mm.yyyy',StrToDate('01.' + m_month + '.' + m_year)));
date_tmp:=IncDay(GetMonday(IncWeek(date_tmp,StrToInt(m_num_weekday)-1)),StrToInt(m_weekday)-1);
result := (DateToStr(date_tmp));
End;
end;
function GetMonday(RefDay: TDate): TDate;
var
DoW: Integer;
DateOffset: Integer;
begin
DoW := DayOfWeek(RefDay);
// Montag der Woche
if DoW = 1 then
DateOffset := -6
else
DateOffset := DoW - 2;
result := RefDay - DateOffset;
end;
Я честно пытался понять, что ты хочешьНужна еще консультация:
Написал функцию для расчета. Но если нужно найти в начале месяца - тут не лады. Например: нужно найти число 7 февраля по формуле
1:4:1
1(первая неделя):4(Четверг);1(январь) (в сумме Первый четверг Января)
Вместо Даты 7 февраля я получаю 31 декабря 2015 года.
Помогите. Уже голова дымит, не могу реализовать так, чтобы проблем не было как с началом так и с концом недели.
Code:function getdatefrom(strs: string): string; var m_year, m_weekday, m_num_weekday, m_month: string; date_tmp, BDate: TDateTime; masiv: StringArray; const PUNCT = [':', ';']; begin if TryStrToDate(strs, BDate) then result := strs else Begin try SetLength(masiv, 4); masiv := split(strs, PUNCT); m_num_weekday := masiv[0]; m_weekday := masiv[1]; m_month := masiv[2]; finally if m_num_weekday = '' then m_num_weekday := inttostr(WeekOfTheMonth(now)); if m_weekday = '' then m_weekday := inttostr(dayOfTheMonth(now)); if m_month = '' then m_month := inttostr(Monthoftheyear(now)); end; // sShowMessage (m_num_weekday+' -'+m_weekday+' -'+m_month); if length(masiv) = 4 then m_year := masiv[3] else m_year := inttostr(YearOf(now)); date_tmp := StrToDate(FormatDateTime('dd.mm.yyyy',StrToDate('01.' + m_month + '.' + m_year))); date_tmp:=IncDay(GetMonday(IncWeek(date_tmp,StrToInt(m_num_weekday)-1)),StrToInt(m_weekday)-1); result := (DateToStr(date_tmp)); End; end; function GetMonday(RefDay: TDate): TDate; var DoW: Integer; DateOffset: Integer; begin DoW := DayOfWeek(RefDay); // Montag der Woche if DoW = 1 then DateOffset := -6 else DateOffset := DoW - 2; result := RefDay - DateOffset; end;