質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

631閲覧

フォルダを作り指定の日付をフォルダネームにしたいのですが

Saka_tomo

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2022/08/10 11:46

指定日付をフォルダネームにしたフォルダの作成

c#でフォルダの作成をしないといけないのですが、条件があり昨年12月最終週の月曜から今年1月の2週目までの平日の日付をフォルダネーム(yyyymmdd)に指定し1日毎に12フォルダずつ作りたいのですが、日付の設定方法がわからず、ご教示いただけないでしょうか。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2022/08/10 11:56

まず、その日付を出すことはできるんでしょうか
Saka_tomo

2022/08/10 12:13

説明が足りず申し訳ございません。 日付を出すところからになりますす。
退会済みユーザー

退会済みユーザー

2022/08/10 12:43

自分ではどこまで実装できていて、どこで躓いていて、何が分かれば解決するかを、自分が書いたコードを質問欄に書いて説明できませんか? 何もわからないから一から手取り足取り教えてくれと言うのはダメです。
Saka_tomo

2022/08/10 12:49

以前に、ディレクトリの階層を着いくる過程で、階層ごとに異なるフォルダ名で複数個のフォルダを作ったものは有るのですが、フォルダネームに暦の日付を指定して設定する方法についてお聞きしたかったのですが。
Saka_tomo

2022/08/10 12:50 編集

ディレクトリの階層を作る過程の誤りです。
退会済みユーザー

退会済みユーザー

2022/08/10 12:58

質問は編集できるので、「異なるフォルダ名で複数個のフォルダを作った」コードをアップして、それをどうしたいのか、分からないのは何かの説明を追記しましょう。
YAmaGNZ

2022/08/10 13:04

DateTime型をご希望のフォーマットの文字列に変換する方法が分からないということでしょうか? また、簡単に「平日」と仰っていますが、祝日はどうするのでしょうか?
Zuishin

2022/08/10 23:01

1 月 3 日が平日なのかどうか気になるところです。
退会済みユーザー

退会済みユーザー

2022/08/11 00:28

会社の休みとかはどうするのでしょうね。
guest

回答2

0

.NET6です^^

cs

1Enumerable.Repeat(new DateOnly(DateTime.Now.Year, 1, 1), 30) // 19でいいみたいだが考えるのも面倒なので多めにw 2 .Select((d, i) => d.AddDays(i - 7)) // 1週間分戻す 3 .SkipWhile(d => d.DayOfWeek != DayOfWeek.Monday) // 月曜日まで飛ばす 4 .Where(d => d.DayOfWeek != DayOfWeek.Sunday) // 日曜日は除外 5 .Take(12) // 12日分 6 .ToList() // 面倒なのでList.ForEach 7 .ForEach(d => Console.WriteLine($"{d:yyyy/MM/dd(ddd)}")); 8 9Console.WriteLine(); 10 11Enumerable.Repeat(new DateOnly(2023, 1, 1), 30) 12 .Select((d, i) => d.AddDays(i - 7)) 13 .SkipWhile(d => d.DayOfWeek != DayOfWeek.Monday) 14 .Where(d => d.DayOfWeek != DayOfWeek.Sunday) 15 .Take(12) 16 .ToList() 17 .ForEach(d => Console.WriteLine($"{d:yyyy/MM/dd(ddd)}"));
2021/12/27(月) 2021/12/28(火) 2021/12/29(水) 2021/12/30(木) 2021/12/31(金) 2022/01/01(土) 2022/01/03(月) 2022/01/04(火) 2022/01/05(水) 2022/01/06(木) 2022/01/07(金) 2022/01/08(土) 2022/12/26(月) 2022/12/27(火) 2022/12/28(水) 2022/12/29(木) 2022/12/30(金) 2022/12/31(土) 2023/01/02(月) 2023/01/03(火) 2023/01/04(水) 2023/01/05(木) 2023/01/06(金) 2023/01/07(土)

投稿2022/08/11 08:05

TN8001

総合スコア9317

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

2021年12月の最後の月曜から2022年1月の第2日曜日まで列挙してみました。
あとはなんとかしてください。

C#

1using System; 2 3class Program 4{ 5 static readonly TimeSpan OneDay = new TimeSpan(TimeSpan.TicksPerDay); 6 7 static void Main(string[] args) { 8 DateTime start = GetLastMonday(2021, 12); 9 DateTime end = GetNthSunday(2022, 1, 2); 10 for (DateTime date = start; date <= end; date += OneDay) { 11 Console.WriteLine(date.ToString("yyyy/MM/dd(ddd)")); 12 } 13 Console.ReadLine(); 14 } 15 16 // 指定された年月の最後の月曜日を取得 17 static DateTime GetLastMonday(int year, int month) { 18 DateTime tmp = new DateTime(year, month, DateTime.DaysInMonth(year, month)); 19 while (tmp.DayOfWeek != DayOfWeek.Monday) { 20 tmp -= OneDay; 21 } 22 return tmp; 23 } 24 25 // 指定された年月の n 番目の日曜日を取得 26 static DateTime GetNthSunday(int year, int month, int n) { 27 DateTime tmp = new DateTime(year, month, 1 + (n - 1) * 7); 28 while (tmp.DayOfWeek != DayOfWeek.Sunday) { 29 tmp += OneDay; 30 } 31 return tmp; 32 } 33}

日曜しか休みがないんですね。ブラックだなあ。

追記

終了日はこっちのほうがいいかも?

C#

1 // 指定された年月の n 週目の最終日(土曜日)を取得 2 static DateTime GetLastDayOfNthWeek(int year, int month, int n) { 3 DateTime tmp = new DateTime(year, month, 1 + (n - 1) * 7); 4 while (tmp.DayOfWeek != DayOfWeek.Saturday) { 5 tmp += OneDay; 6 } 7 return tmp; 8 }

投稿2022/08/10 16:05

編集2022/08/11 00:38
KOZ6.0

総合スコア2626

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TN8001

2022/08/11 08:04

来年や再来年のカレンダーでやると終了日がずれませんか? GetNthSunday(2024, GetLastDayOfNthWeek(2023, 最終月曜日から(日曜以外の)2週間分(12日分)の日付が欲しいのかなと思いました。 「2週目まで」という表現が分かりにくいような気もしますが^^;
KOZ6.0

2022/08/11 10:02

キモなのは、DateTime を加算や減算できるってことなので、その辺はわりとどうでもいい話と思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問